apelleti
Messages postés3Date d'inscriptionmercredi 14 mai 2008StatutMembreDernière intervention31 mai 2008
-
27 mai 2008 à 11:57
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008
-
2 juin 2008 à 09:27
Bonjour à tous,
Je souhaiterais savoir si quelqu'un pourrait valider mon buffer et/ou m'indiquer les erreurs notables.
using System;
using System.Collections.Generic;
using System.Text;
namespace BufferCirculaire
{
class FIFO
{
privatebyte[] Buffer; //tableau d'octet simulant les registres d'un module.
privateint NextRead = 0; // indice qui permet de connaitre la prochaine case du tableau à lire.
privateint NextWrite = 0; // indice qui permet de connaitre la prochaine case du tableau à écrire.
publicint NbRead = 0; // indice qui permet de connaitre le nombre d'octet pouvant encore etre lus.
publicint NbWrite = 0; // indice qui permet de connaitre le nombre d'octet pouvant encore etre ecris.
public FIFO()
{//Constructeur : permet de créer un tableau de taille prédéfinis.
Buffer = newbyte[1024];
NbRead = 0;
NbWrite = 1024;
}
public FIFO(int n)
{//Constructeur : permet de créer un tableau de taille choisis.
Buffer = newbyte[n];
NbRead = 0;
NbWrite = n;
}
publicvoid MargeNbRead()
{
if(NextWrite > NextRead)
NbRead = NextWrite - NextRead;
if(NextWrite < NextRead)
NbRead = NextRead - NextWrite;
}
publicvoid MargeNbWrite()
{
if(NextWrite > NextRead)
NbWrite = Buffer.Length - NextWrite;
if(NextWrite < NextRead)
NbWrite = Buffer.Length - NextWrite ;
}
publicbool Write(byte[] WriteBuffer)//Ecriture dans un tableau d'octect, WriteBuffer = tableau à écrire.
{
MargeNbRead();
MargeNbWrite();
//Controle si assez de place dans Buffer
if(NbWrite >= WriteBuffer.Length)
{
for(int i = 0; i < WriteBuffer.Length; i++)
{
//Ecriture
Buffer[NextWrite] = WriteBuffer[i];
NextWrite++;
if(NextWrite == Buffer.Length)
{
//Fin du Buffer, retour à 0
NextWrite = 0;
}
}
returntrue;
}
else
{
System.Exception ew = new System.Exception("OverRun : Vous aller écrire sur des registres non lus.");
throw ew;
}
}
publicbyte[] Read(refbyte[] ReadBuffer, int index, int nread)// Lecture d'un tableau d'octet, nread = nombre de cases à lire.
{
MargeNbRead();
MargeNbWrite();
byte[] ReadBuff = newbyte[nread];
if(NbRead >= nread)
{
if(index != nread)
{
for(int i = 0; i < nread; i++)
{
//Lecture
ReadBuff[i] = ReadBuffer[index];
index++;
NextRead++;
if(NextRead == ReadBuffer.Length)
{
//Fin du Buffer, retour à 0
NextRead = 0;
}
}
}
return ReadBuff;
}
else
{
return(null);
System.Exception er = new System.Exception("Vous aller lire sur des registres non écris.");
throw er;
}
}
}
}
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 30 mai 2008 à 13:14
Tu as un probleme quelque part dans ton code ? Je comprends pas la question ...
Les trois lois de Codes-Sources :
1) Tu lis et respecte le reglement
2) Tu pense a valider si une reponse apportée a ton probleme t'a aidé
3) Si tu ne respecte pas les 2 premières .......................... TU SORS !!!!!!
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 mai 2008 à 14:46
apelleti => on se calme... il demandait des précisions..., et les 4 dernières lignes de son post font partie de sa signature, pas de sa réponse à ta question...
Liverion => tu as peut être intérêt à mettre un ptit séparateur en haut de ta signature ^^
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 31 mai 2008 à 15:59
Rapidement, concernant le code en lui même sans rentrer dans les détails :
- NbRead et NbWrite sont des champs public (accessibles en lecture/écriture donc) là où me semble t'il un accès de l'extérieur nécessite plutôt d'être en lecture seule => propriété en lecture seule (get)
- Commentaires descriptifs des membres : n'oublies pas que tu peux utiliser des tags de documentation (/// au dessus des membres), ce qui présentent quelques avantages comme la génération de documentation et l'aide contextuelle lors de l'utilisation de la classe
- Méthodes Read/Write : Il est déconseillé de lever une exception générique de type System.Exception, au besoin crée en une
- Méthode Read : la levée d'exception derrière le return null ne sert à rien car ne sera jamais executée
- Méthode Read : utiliser à la fois un paramètre en ref et le retour de la fonction pour apparemment la même chose (vu de l'extérieur) peut être déroutant pour l'utilisateur. Surtout que dans les faits il peut y avoir une différence => les tags de documentation sont encore plus importants ici
- Tu ne vérifies pas les entrées : exemple je peux passer une valeur négative au constructeur, ou une valeur très grande.
apelleti
Messages postés3Date d'inscriptionmercredi 14 mai 2008StatutMembreDernière intervention31 mai 2008 31 mai 2008 à 22:12
Désolé si j'ai été un peu agressif, j'en suis désolé!
Je te remercie beaucoup pour ton aider, en effet il y a quelques chose incohérent maintenant que tu me le dis!
Merci encore!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 2 juin 2008 à 09:27
Oui désolé si tu as mal compris ma remarque, je me demandais exactement où se situaient les soucis dans ton code en fait, et "Je souhaiterais savoir si quelqu'un pourrait valider mon buffer et/ou m'indiquer les erreurs notables" me parraissait un peu vague. Signature modifiée pour eviter toute incompréhension :D
~~~~~~~~~
Les trois lois de Codes-Sources :
1) Tu lis et respecte le reglement
2) Tu pense a valider si une reponse apportée a ton probleme t'a aidé
3) Si tu ne respecte pas les 2 premières ....TU SORS !!!
~~~~~~~~~
apelleti
Messages postés3Date d'inscriptionmercredi 14 mai 2008StatutMembreDernière intervention31 mai 2008 30 mai 2008 à 19:03
Tu est vraiment super utile comme mec!
Si je met mon code ici, c'est peu etre parce que j'ai une erreur!
Si j'aivais eu des réponse je l'ai aurais validé mais c'était pas le cas!
Alors si tu peux m'aider merci, mais pour mettre des post comme ça, ca sert a rien!
PS : Mon code marche finalement, j'ai plus besoin d'aider! Aussi je penserais a validé ta réponse, t'inquiète!! =)