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;
}
}
}
}
Merci pour vos réponses.