Fix typo.
[asdcplib.git] / src / MXFTypes.h
index 5bb8ca44e21ffd39f190a07edab0c29d2e9ee03a..20d12da9ec4679b563e85f6fb8c27beab6d75994 100755 (executable)
@@ -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<T>::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<T>::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;
        };
 
@@ -296,7 +312,7 @@ namespace ASDCP
          Rational() {}
          ~Rational() {}
 
-         Rational(const Rational& rhs) {
+         Rational(const Rational& rhs) : ASDCP::Rational(), IArchive() {
            Numerator = rhs.Numerator;
            Denominator = rhs.Denominator;
          }
@@ -320,7 +336,7 @@ namespace ASDCP
 
          //
          inline const char* EncodeString(char* str_buf, ui32_t buf_len) const {
-           snprintf(str_buf, buf_len, "%lu/%lu", Numerator, Denominator);
+           snprintf(str_buf, buf_len, "%d/%d", Numerator, Denominator);
            return str_buf;
          }
 
@@ -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;
        };