C# Buffer Circulaire (tableau circulaire) [Résolu]

apelleti
Messages postés
3
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
31 mai 2008
- 27 mai 2008 à 11:57 - Dernière réponse : Liverion
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Dernière intervention
18 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;
            }
        }
    }
}



Merci pour vos réponses.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Liverion
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Dernière intervention
18 août 2008
- 30 mai 2008 à 13:14
3
Merci
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 !!!!!!

Merci Liverion 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de Liverion
Meilleure réponse
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 31 mai 2008 à 14:46
3
Merci
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 ^^

/*
coq
MVP Visual C#
CoqBlog
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 31 mai 2008 à 15:59
0
Merci
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.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
apelleti
Messages postés
3
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
31 mai 2008
- 31 mai 2008 à 22:12
0
Merci
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!
Commenter la réponse de apelleti
cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 1 juin 2008 à 01:59
0
Merci
De rien.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
Liverion
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Dernière intervention
18 août 2008
- 2 juin 2008 à 09:27
0
Merci
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 !!!
~~~~~~~~~
Commenter la réponse de Liverion
apelleti
Messages postés
3
Date d'inscription
mercredi 14 mai 2008
Dernière intervention
31 mai 2008
- 30 mai 2008 à 19:03
-2
Merci
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!! =)
Commenter la réponse de apelleti

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.