X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FMXFTypes.h;h=1fa6176d9cf253f0d260edbf8cdf78a8a29f6c02;hb=71e5dbde64e9186cfd5de462553485612218d6fc;hp=051832bcf933d0fbe84cd8e0f6806d417500b7d0;hpb=1c20f520f0ac0d44c64cc53991f12c84a416b48f;p=asdcplib.git diff --git a/src/MXFTypes.h b/src/MXFTypes.h index 051832b..1fa6176 100755 --- a/src/MXFTypes.h +++ b/src/MXFTypes.h @@ -125,6 +125,18 @@ namespace ASDCP inline virtual bool HasValue() const { return ! this->empty(); } + virtual ui32_t ArchiveLength() const { + ui32_t arch_size = sizeof(ui32_t)*2; + + typename std::vector::const_iterator l_i = this->begin(); + assert(l_i != this->end()); + + for ( ; l_i != this->end(); l_i++ ) + arch_size += l_i->ArchiveLength(); + + return arch_size; + } + // virtual bool Archive(Kumu::MemIOWriter* Writer) const { if ( ! Writer->WriteUi32BE(this->size()) ) return false; @@ -188,6 +200,17 @@ namespace ASDCP inline virtual bool HasValue() const { return ! this->empty(); } + virtual ui32_t ArchiveLength() const { + ui32_t arch_size = 0; + + typename std::list::const_iterator l_i = this->begin(); + + for ( ; l_i != this->end(); l_i++ ) + arch_size += l_i->ArchiveLength(); + + return arch_size; + } + // virtual bool Archive(Kumu::MemIOWriter* Writer) const { bool result = true; @@ -255,6 +278,7 @@ namespace ASDCP } inline virtual bool HasValue() const { return true; } + inline virtual ui32_t ArchiveLength() const { return 8L; } // inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { @@ -265,27 +289,19 @@ namespace ASDCP }; // - class UTF16String : public Kumu::IArchive + class UTF16String : public std::string, public Kumu::IArchive { - ui16_t m_length; - char m_buffer[IdentBufferLen]; - ASDCP_NO_COPY_CONSTRUCT(UTF16String); - public: - UTF16String() : m_length(0) { *m_buffer = 0; } + UTF16String() {} ~UTF16String() {} const UTF16String& operator=(const char*); + const UTF16String& operator=(const std::string&); - // - const char* EncodeString(char* str_buf, ui32_t buf_len) const { - strncpy(str_buf, m_buffer, Kumu::xmin(buf_len, ((ui32_t)m_length+1))); - str_buf[buf_len-1] = 0; - return str_buf; - } - + const char* EncodeString(char* str_buf, ui32_t buf_len) const; + inline virtual bool HasValue() const { return ! empty(); } + inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t) + size(); } virtual bool Unarchive(Kumu::MemIOReader* Reader); - inline virtual bool HasValue() const { return m_length > 0; } virtual bool Archive(Kumu::MemIOWriter* Writer) const; }; @@ -331,6 +347,7 @@ namespace ASDCP } inline virtual bool HasValue() const { return true; } + inline virtual ui32_t ArchiveLength() const { return sizeof(ui32_t)*2; } inline virtual bool Archive(Kumu::MemIOWriter* Writer) const { if ( ! Writer->WriteUi32BE((ui32_t)Numerator) ) return false; @@ -345,12 +362,12 @@ namespace ASDCP ASDCP_NO_COPY_CONSTRUCT(VersionType); public: - enum Release_t { RL_UNKNOWN, RM_RELEASE, RL_DEVELOPMENT, RL_PATCHED, RL_BETA, RL_PRIVATE }; + enum Release_t { RL_UNKNOWN, RL_RELEASE, RL_DEVELOPMENT, RL_PATCHED, RL_BETA, RL_PRIVATE }; ui16_t Major; ui16_t Minor; ui16_t Patch; ui16_t Build; - ui16_t Release; + Release_t Release; VersionType() : Major(0), Minor(0), Patch(0), Build(0), Release(RL_UNKNOWN) {} ~VersionType() {} @@ -373,6 +390,7 @@ namespace ASDCP } inline virtual bool HasValue() const { return true; } + inline virtual ui32_t ArchiveLength() const { return sizeof(ui16_t)*5; } virtual bool Archive(Kumu::MemIOWriter* Writer) const { if ( ! Writer->WriteUi16BE(Major) ) return false; @@ -385,7 +403,7 @@ namespace ASDCP }; // - class Raw : public Kumu::ByteString, public Kumu::IArchive + class Raw : public Kumu::ByteString { ASDCP_NO_COPY_CONSTRUCT(Raw); @@ -395,7 +413,6 @@ namespace ASDCP // virtual bool Unarchive(Kumu::MemIOReader* Reader); - inline virtual bool HasValue() const { return Length() > 0; } virtual bool Archive(Kumu::MemIOWriter* Writer) const; const char* EncodeString(char* str_buf, ui32_t buf_len) const; };