diff --git a/src/blackrock.h b/src/blackrock.h index 35c25af..e53252f 100644 --- a/src/blackrock.h +++ b/src/blackrock.h @@ -20,6 +20,17 @@ // include c/c++ headers #include +// incluse qt headers +#include + +/** Little helper function to read structs from QFiles in binary mode. */ +template +inline bool readStruct(QFile& file, T& s) { + qint64 bytesToRead = sizeof(T); + qint64 bytesRead = file.read(reinterpret_cast(&s), bytesToRead); + return (bytesToRead == bytesRead); +} + #pragma pack(push, 1) // Shared data structures diff --git a/src/neveventsprovider.h b/src/neveventsprovider.h index 42b21cc..63204a6 100644 --- a/src/neveventsprovider.h +++ b/src/neveventsprovider.h @@ -34,13 +34,6 @@ class NEVEventsProvider : public EventsProvider { private: NEVBasicHeader mBasicHeader; NEVExtensionHeader* mExtensionHeaders; - - template - inline bool readStruct(QFile& file, T& s) { - qint64 bytesToRead = sizeof(T); - qint64 bytesRead = file.read(reinterpret_cast(&s), bytesToRead); - return (bytesToRead == bytesRead); - } }; #endif diff --git a/src/nsxtracesprovider.cpp b/src/nsxtracesprovider.cpp index a4372f2..740b53e 100644 --- a/src/nsxtracesprovider.cpp +++ b/src/nsxtracesprovider.cpp @@ -43,10 +43,7 @@ bool NSXTracesProvider::init() { } // Read basic header - qint64 bytesToRead = sizeof(NSXBasicHeader); - qint64 bytesRead = dataFile.read(reinterpret_cast(&(mBasicHeader)), bytesToRead); - - if(bytesToRead != bytesRead) { + if(!readStruct(dataFile, mBasicHeader)) { dataFile.close(); return false; } @@ -58,11 +55,8 @@ bool NSXTracesProvider::init() { // Read extension headers mExtensionHeaders = new NSXExtensionHeader[this->nbChannels]; - bytesToRead = sizeof(NSXExtensionHeader); for(int channel = 0; channel < this->nbChannels; channel++) { - bytesRead = dataFile.read(reinterpret_cast(mExtensionHeaders + channel), bytesToRead); - - if(bytesToRead != bytesRead) { + if(!readStruct(dataFile, mExtensionHeaders[channel])) { delete[] mExtensionHeaders; dataFile.close(); return false; @@ -70,10 +64,7 @@ bool NSXTracesProvider::init() { } // Read data header - bytesToRead = sizeof(NSXDataHeader); - bytesRead = dataFile.read(reinterpret_cast(&mDataHeader), bytesToRead); - - if(bytesToRead != bytesRead) { + if(!readStruct(dataFile, mDataHeader)) { delete[] mExtensionHeaders; dataFile.close(); return false;