Brauche Denkanstoß zum Thema Variablenzugriff



  • Hi,

    ich trette im Moment auf der Stelle und habe keine passende Idee zu folgendem Thema. Das Programm liest und analysiert eine binäre Datei. In meiner Hauptschleife wird Byte für Byte analysiert und dann entsprechende Funktionen und Unterfunktionen aufgerufen die ebenfalls wieder einzelne Bytes aus der Datei lesen. Das Lesen der Bytes wird über die Funktion getByte(...) gemacht, die einen Buffer aus der Datei liest und einzelne Bytes davon zurück gibt. In dieser getByte() Funktion habe ich einen Byte-Zähler integriert, um bei einem gefundenen Syntax-Problem genau zu wissen an welcher Stelle in der Datei ein Problem existiert.

    Nun zu meinem Problem. Ich kann den Byte-Zähler und den Datei-Pointer global anlegen (was ja nicht so gut ist) oder bei jedem Aufruf einen Pointer auf den Byte-Zähler und die Datei in getByte(pCounter, pFile) übergeben. Nur, getByte() wird in der Hauptschleife und in mehreren Funktionen aufgerufen, d.h. ich muss über mehrere Funktionen die Pointer durchreichen. Ich gehe mal davon aus, dass das etwas umständlich ist, aber mir fehlt da eine Idee dazu das in C++ besser zu machen.

    Wie würdet ihr so was programmieren ?

    // Hauptschleife
    while( !EndOfFile )
      {
       int x = getByte(...);
       switch( x )
         {
          case 0x10: F1(...);
                     break;
          case 0x20: F2(...);
                     break;
          // ...
         }
      }
    
    int F1(...)
    {
     //...
     int y = getByte(...);
    }
    


  • Ich würde getByte, das Filehandle und diesen Zähler zusammen in eine Klasse packen.



  • Und den Zähler und Filehandle dann als public anlegen ?

    Bashar schrieb:

    Ich würde getByte, das Filehandle und diesen Zähler zusammen in eine Klasse packen.

    Und den Zähler und Filehandle dann als public anlegen ?



  • Nein, auf keinen Fall.



  • enum EIOPos
    {
        eIOBeg = 0,
        eIOEnd,
        eIOCur,
    };
    
    class IIO // Input-/Outputinterface
    {
        private:
        size_t    offset;
        size_t    size;
    
        public:
            IIO(){}
            ~IIO(){}
    
        virtual char* read( size_t size ) = 0; // wahlweise auch std::queue<char> o. std::string
        virtual void write( char* bytes, size_t size ) = 0;
        virtual void move( size_t offset, EIOPos pos ) = 0;
        virtual bool is_open( void ) = 0;
        virtual void clear( void ) = 0;
        virtual size_t size( void ) = 0;
    
        .....
    } /* class IIO */;
    
    class CFile : public IIO
    {
        ..
    } /* class CFile */;
    

    Is jetzt natürlich nix genaues und nicht sehr überlegt, aber so in der Art würde ich es schreiben (jedenfalls hier, ich bin da etwas schludgriger 🤡 ).


Anmelden zum Antworten