///////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2018- Equinor ASA // // ResInsight is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY // WARRANTY; without even the implied warranty of MERCHANTABILITY or // FITNESS FOR A PARTICULAR PURPOSE. // // See the GNU General Public License at // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once #include #include #include #include //================================================================================================== // // // //================================================================================================== class VdeArrayDataPacket { public: enum ElementType { Unknown = 0, Float32 = 1, Uint32 = 2, Uint8 = 4, }; public: VdeArrayDataPacket(); bool isValid() const; int arrayId() const; ElementType elementType() const; size_t elementSize() const; size_t elementCount() const; const char* arrayData() const; unsigned short imageWidth() const; unsigned short imageHeight() const; unsigned char imageComponentCount() const; size_t fullPacketSize() const; const char* fullPacketRawPtr() const; static std::unique_ptr fromFloat32Arr(int arrayId, const float* srcArr, size_t srcArrElementCount); static std::unique_ptr fromUint32Arr(int arrayId, const unsigned int* srcArr, size_t srcArrElementCount); static std::unique_ptr fromUint8ImageRGBArr(int arrayId, unsigned short imageWidth, unsigned short imageHeight, const unsigned char* srcArr, size_t srcArrElementCount); static VdeArrayDataPacket fromRawPacketBuffer(const char* rawPacketBuffer, size_t bufferSize, std::string* errString); private: bool assign(int arrayId, ElementType elementType, size_t elementCount, unsigned short imageWidth, unsigned short imageHeight, unsigned char imageCompCount, const char* arrayDataPtr, size_t arrayDataSizeInBytes); static size_t sizeOfElement(ElementType elementType); private: int m_arrayId; ElementType m_elementType; size_t m_elementCount; unsigned short m_imageWidth; unsigned short m_imageHeight; unsigned char m_imageComponentCount; std::vector m_packetBytes; }; //================================================================================================== // // // //================================================================================================== class VdeBufferReader { public: VdeBufferReader(const char* buffer, size_t bufferSize); unsigned int getUint32(size_t byteOffset) const; unsigned short getUint16(size_t byteOffset) const; unsigned char getUint8(size_t byteOffset) const; private: const char* m_buffer; const size_t m_bufferSize; }; //================================================================================================== // // // //================================================================================================== class VdeBufferWriter { public: VdeBufferWriter(char* buffer, size_t bufferSize); void setUint32(size_t byteOffset, unsigned int val); void setUint16(size_t byteOffset, unsigned short val); void setUint8(size_t byteOffset, unsigned char val); private: char* m_buffer; const size_t m_bufferSize; };