From 34554928aa6c35535e7b9129fe887406b610b995 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Fri, 19 Dec 2014 00:03:49 +0100 Subject: [PATCH] cosmetics: use spaces instead of tab characters; remove trailing whitespace --- LICENSE.LGPL | 2 +- ebml/Debug.h | 120 ++-- ebml/EbmlBinary.h | 84 +-- ebml/EbmlConfig.h | 12 +- ebml/EbmlContexts.h | 14 +- ebml/EbmlCrc32.h | 118 ++-- ebml/EbmlDate.h | 70 +- ebml/EbmlDummy.h | 26 +- ebml/EbmlElement.h | 314 ++++----- ebml/EbmlEndian.h | 82 +-- ebml/EbmlFloat.h | 92 +-- ebml/EbmlHead.h | 14 +- ebml/EbmlId.h | 70 +- ebml/EbmlMaster.h | 232 +++---- ebml/EbmlSInteger.h | 62 +- ebml/EbmlStream.h | 36 +- ebml/EbmlString.h | 56 +- ebml/EbmlSubHead.h | 38 +- ebml/EbmlTypes.h | 14 +- ebml/EbmlUInteger.h | 76 +-- ebml/EbmlUnicodeString.h | 116 ++-- ebml/EbmlVersion.h | 8 +- ebml/EbmlVoid.h | 46 +- ebml/IOCallback.h | 86 +-- ebml/MemIOCallback.h | 116 ++-- ebml/StdIOCallback.h | 60 +- ebml/c/libebml_t.h | 4 +- libebml.proj | 2 +- src/Debug.cpp | 250 ++++---- src/EbmlBinary.cpp | 66 +- src/EbmlContexts.cpp | 16 +- src/EbmlCrc32.cpp | 450 ++++++------- src/EbmlDate.cpp | 54 +- src/EbmlDummy.cpp | 10 +- src/EbmlElement.cpp | 928 +++++++++++++-------------- src/EbmlFloat.cpp | 110 ++-- src/EbmlHead.cpp | 10 +- src/EbmlMaster.cpp | 696 ++++++++++---------- src/EbmlSInteger.cpp | 140 ++-- src/EbmlStream.cpp | 14 +- src/EbmlString.cpp | 146 ++--- src/EbmlSubHead.cpp | 10 +- src/EbmlUInteger.cpp | 124 ++-- src/EbmlUnicodeString.cpp | 350 +++++----- src/EbmlVersion.cpp | 6 +- src/EbmlVoid.cpp | 144 ++--- src/IOCallback.cpp | 48 +- src/MemIOCallback.cpp | 122 ++-- src/StdIOCallback.cpp | 192 +++--- src/platform/win32/WinIOCallback.cpp | 372 +++++------ src/platform/win32/WinIOCallback.h | 52 +- 51 files changed, 3140 insertions(+), 3140 deletions(-) diff --git a/LICENSE.LGPL b/LICENSE.LGPL index b1e3f5a..15a6fe9 100644 --- a/LICENSE.LGPL +++ b/LICENSE.LGPL @@ -146,7 +146,7 @@ such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - + 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an diff --git a/ebml/Debug.h b/ebml/Debug.h index f22cc1b..661936d 100644 --- a/ebml/Debug.h +++ b/ebml/Debug.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id: Debug.h 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id: Debug.h 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme + \author Moritz Bunkus */ #ifndef LIBEBML_DEBUG_H #define LIBEBML_DEBUG_H @@ -55,50 +55,50 @@ static const int MAX_PREFIX_LENGTH = 128; #if defined(LIBEBML_DEBUG) // define the working debugging class -class EBML_DLL_API ADbg +class EBML_DLL_API ADbg { public: - ADbg(int level = 0); - virtual ~ADbg(); + ADbg(int level = 0); + virtual ~ADbg(); - /// \todo make an inline function to test the level first and the process - int OutPut(int level, const char * format,...) const; + /// \todo make an inline function to test the level first and the process + int OutPut(int level, const char * format,...) const; - int OutPut(const char * format,...) const; + int OutPut(const char * format,...) const; - inline int setLevel(const int level) { - return my_level = level; - } + inline int setLevel(const int level) { + return my_level = level; + } - inline bool setIncludeTime(const bool included = true) { - return my_time_included = included; - } + inline bool setIncludeTime(const bool included = true) { + return my_time_included = included; + } - bool setDebugFile(const char * NewFilename); - bool unsetDebugFile(); + bool setDebugFile(const char * NewFilename); + bool unsetDebugFile(); - inline bool setUseFile(const bool usefile = true) { - return my_use_file = usefile; - } + inline bool setUseFile(const bool usefile = true) { + return my_use_file = usefile; + } - inline const char * setPrefix(const char * string) { - return strncpy(prefix, string, MAX_PREFIX_LENGTH); - } + inline const char * setPrefix(const char * string) { + return strncpy(prefix, string, MAX_PREFIX_LENGTH); + } private: - int my_level; - bool my_time_included; - bool my_use_file; - bool my_debug_output; + int my_level; + bool my_time_included; + bool my_use_file; + bool my_debug_output; - int _OutPut(const char * format,va_list params) const; + int _OutPut(const char * format,va_list params) const; - char prefix[MAX_PREFIX_LENGTH]; + char prefix[MAX_PREFIX_LENGTH]; #ifdef WIN32 - HANDLE hFile; + HANDLE hFile; #else - FILE *hFile; + FILE *hFile; #endif // WIN32 }; @@ -109,40 +109,40 @@ private: class EBML_DLL_API ADbg { public: - ADbg(int /* level */ = 0){} - virtual ~ADbg() {} + ADbg(int /* level */ = 0){} + virtual ~ADbg() {} - inline int OutPut(int /* level */, const char * /* format */,...) const { - return 0; - } + inline int OutPut(int /* level */, const char * /* format */,...) const { + return 0; + } - inline int OutPut(const char * /* format */,...) const { - return 0; - } + inline int OutPut(const char * /* format */,...) const { + return 0; + } - inline int setLevel(const int level) { - return level; - } + inline int setLevel(const int level) { + return level; + } - inline bool setIncludeTime(const bool /* included */ = true) { - return true; - } + inline bool setIncludeTime(const bool /* included */ = true) { + return true; + } - inline bool setDebugFile(const char * /* NewFilename */) { - return true; - } + inline bool setDebugFile(const char * /* NewFilename */) { + return true; + } - inline bool unsetDebugFile() { - return true; - } + inline bool unsetDebugFile() { + return true; + } - inline bool setUseFile(const bool /* usefile */ = true) { - return true; - } + inline bool setUseFile(const bool /* usefile */ = true) { + return true; + } - inline const char * setPrefix(const char * string) { - return string; - } + inline const char * setPrefix(const char * string) { + return string; + } }; #endif // defined(LIBEBML_DEBUG) diff --git a/ebml/EbmlBinary.h b/ebml/EbmlBinary.h index cd14589..a22e358 100644 --- a/ebml/EbmlBinary.h +++ b/ebml/EbmlBinary.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Julien Coloos + \file + \version \$Id$ + \author Steve Lhomme + \author Julien Coloos */ #ifndef LIBEBML_BINARY_H #define LIBEBML_BINARY_H @@ -54,51 +54,51 @@ START_LIBEBML_NAMESPACE \class EbmlBinary \brief Handle all operations on an EBML element that contains "unknown" binary data - \todo handle fix sized elements (like UID of CodecID) + \todo handle fix sized elements (like UID of CodecID) */ class EBML_DLL_API EbmlBinary : public EbmlElement { - public: - EbmlBinary(); - EbmlBinary(const EbmlBinary & ElementToClone); - virtual ~EbmlBinary(void); - - virtual bool ValidateSize() const {return IsFiniteSize() && GetSize() < 0x7FFFFFFF;} // we don't mind about what's inside + public: + EbmlBinary(); + EbmlBinary(const EbmlBinary & ElementToClone); + virtual ~EbmlBinary(void); - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - - void SetBuffer(const binary *Buffer, const uint32 BufferSize) { - Data = (binary *) Buffer; - SetSize_(BufferSize); - SetValueIsSet(); - } + virtual bool ValidateSize() const {return IsFiniteSize() && GetSize() < 0x7FFFFFFF;} // we don't mind about what's inside - binary *GetBuffer() const {return Data;} - - void CopyBuffer(const binary *Buffer, const uint32 BufferSize) { - if (Data != NULL) - free(Data); - Data = (binary *)malloc(BufferSize * sizeof(binary)); - memcpy(Data, Buffer, BufferSize); - SetSize_(BufferSize); - SetValueIsSet(); - } - - operator const binary &() const; - - bool IsDefaultValue() const { - return false; - } + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - bool operator==(const EbmlBinary & ElementToCompare) const; + void SetBuffer(const binary *Buffer, const uint32 BufferSize) { + Data = (binary *) Buffer; + SetSize_(BufferSize); + SetValueIsSet(); + } + + binary *GetBuffer() const {return Data;} + + void CopyBuffer(const binary *Buffer, const uint32 BufferSize) { + if (Data != NULL) + free(Data); + Data = (binary *)malloc(BufferSize * sizeof(binary)); + memcpy(Data, Buffer, BufferSize); + SetSize_(BufferSize); + SetValueIsSet(); + } + + operator const binary &() const; + + bool IsDefaultValue() const { + return false; + } + + bool operator==(const EbmlBinary & ElementToCompare) const; #if defined(EBML_STRICT_API) - private: + private: #else - protected: + protected: #endif - binary *Data; // the binary data inside the element + binary *Data; // the binary data inside the element }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlConfig.h b/ebml/EbmlConfig.h index 7169866..b7ecc32 100644 --- a/ebml/EbmlConfig.h +++ b/ebml/EbmlConfig.h @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,10 +27,10 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlConfig.h 1241 2006-01-25 00:59:45Z robux4 $ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id: EbmlConfig.h 1241 2006-01-25 00:59:45Z robux4 $ + \author Steve Lhomme + \author Moritz Bunkus */ #ifndef LIBEBML_CONFIG_H diff --git a/ebml/EbmlContexts.h b/ebml/EbmlContexts.h index 9e9cb65..b278821 100644 --- a/ebml/EbmlContexts.h +++ b/ebml/EbmlContexts.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlContexts.h 736 2004-08-28 14:05:09Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlContexts.h 736 2004-08-28 14:05:09Z robux4 $ + \author Steve Lhomme */ #ifndef LIBEBML_CONTEXTS_H #define LIBEBML_CONTEXTS_H @@ -51,10 +51,10 @@ extern const EbmlSemanticContext EBML_DLL_API EDocTypeVersion_Context; extern const EbmlSemanticContext EBML_DLL_API EDocTypeReadVersion_Context; #define Context_EbmlHead EbmlHead_Context - + // global elements extern const EbmlSemanticContext EBML_DLL_API & GetEbmlGlobal_Context(); - + END_LIBEBML_NAMESPACE #endif // LIBEBML_CONTEXTS_H diff --git a/ebml/EbmlCrc32.h b/ebml/EbmlCrc32.h index f8bfaa6..7108ae1 100644 --- a/ebml/EbmlCrc32.h +++ b/ebml/EbmlCrc32.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Jory Stone + \file + \version \$Id$ + \author Steve Lhomme + \author Jory Stone */ #ifndef LIBEBML_CRC32_H #define LIBEBML_CRC32_H @@ -45,58 +45,58 @@ START_LIBEBML_NAMESPACE DECLARE_EBML_BINARY(EbmlCrc32) - public: - EbmlCrc32(const EbmlCrc32 & ElementToClone); - virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() == 4);} - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); -// filepos_t UpdateSize(bool bWithDefault = false); - - bool IsDefaultValue() const { - return false; - } + public: + EbmlCrc32(const EbmlCrc32 & ElementToClone); + virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() == 4);} + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); +// filepos_t UpdateSize(bool bWithDefault = false); - void AddElementCRC32(EbmlElement &ElementToCRC); - bool CheckElementCRC32(EbmlElement &ElementToCRC); - - /*! - Use this to quickly check a CRC32 with some data - \return True if inputCRC matches CRC32 generated from input data - */ - static bool CheckCRC(uint32 inputCRC, const binary *input, uint32 length); - /*! - Calls Update() and Finalize(), use to create a CRC32 in one go - */ - void FillCRC32(const binary *input, uint32 length); - /*! - Add data to the CRC table, in other words process some data bit by bit - */ - void Update(const binary *input, uint32 length); - /*! - Use this with Update() to Finalize() or Complete the CRC32 - */ - void Finalize(); - /*! - Returns a uint32 that has the value of the CRC32 - */ - uint32 GetCrc32() const { - return m_crc_final; - }; - - void ForceCrc32(uint32 NewValue) { m_crc_final = NewValue; SetValueIsSet();} + bool IsDefaultValue() const { + return false; + } + + void AddElementCRC32(EbmlElement &ElementToCRC); + bool CheckElementCRC32(EbmlElement &ElementToCRC); + + /*! + Use this to quickly check a CRC32 with some data + \return True if inputCRC matches CRC32 generated from input data + */ + static bool CheckCRC(uint32 inputCRC, const binary *input, uint32 length); + /*! + Calls Update() and Finalize(), use to create a CRC32 in one go + */ + void FillCRC32(const binary *input, uint32 length); + /*! + Add data to the CRC table, in other words process some data bit by bit + */ + void Update(const binary *input, uint32 length); + /*! + Use this with Update() to Finalize() or Complete the CRC32 + */ + void Finalize(); + /*! + Returns a uint32 that has the value of the CRC32 + */ + uint32 GetCrc32() const { + return m_crc_final; + }; + + void ForceCrc32(uint32 NewValue) { m_crc_final = NewValue; SetValueIsSet();} #if defined(EBML_STRICT_API) private: #else protected: #endif - void ResetCRC(); - void UpdateByte(binary b); + void ResetCRC(); + void UpdateByte(binary b); + + static const uint32 m_tab[256]; + uint32 m_crc; + uint32 m_crc_final; - static const uint32 m_tab[256]; - uint32 m_crc; - uint32 m_crc_final; - EBML_CONCRETE_CLASS(EbmlCrc32) }; @@ -104,36 +104,36 @@ template inline unsigned int GetAlignment(T */* dummy */=NULL) // VC60 workaround { #if defined(_MSC_VER) && (_MSC_VER >= 1300) - return __alignof(T); + return __alignof(T); #elif defined(__GNUC__) - return __alignof__(T); + return __alignof__(T); #else - return sizeof(T); + return sizeof(T); #endif } template inline bool IsPowerOf2(T n) { - return n > 0 && (n & (n-1)) == 0; + return n > 0 && (n & (n-1)) == 0; } template inline T2 ModPowerOf2(T1 a, T2 b) { - assert(IsPowerOf2(b)); - return T2(a) & (b-1); + assert(IsPowerOf2(b)); + return T2(a) & (b-1); } inline bool IsAlignedOn(const void *p, unsigned int alignment) { - return IsPowerOf2(alignment) ? ModPowerOf2((uintptr_t)p, alignment) == 0 : (uintptr_t)p % alignment == 0; + return IsPowerOf2(alignment) ? ModPowerOf2((uintptr_t)p, alignment) == 0 : (uintptr_t)p % alignment == 0; } template -inline bool IsAligned(const void *p, T */* dummy */=NULL) // VC60 workaround +inline bool IsAligned(const void *p, T */* dummy */=NULL) // VC60 workaround { - return IsAlignedOn(p, GetAlignment()); + return IsAlignedOn(p, GetAlignment()); } END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlDate.h b/ebml/EbmlDate.h index e20a853..76e8741 100644 --- a/ebml/EbmlDate.h +++ b/ebml/EbmlDate.h @@ -27,9 +27,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_DATE_H #define LIBEBML_DATE_H @@ -44,55 +44,55 @@ START_LIBEBML_NAMESPACE \brief Handle all operations related to an EBML date */ class EBML_DLL_API EbmlDate : public EbmlElement { - public: - EbmlDate() :EbmlElement(8, false), myDate(0) {} - EbmlDate(const EbmlDate & ElementToClone); + public: + EbmlDate() :EbmlElement(8, false), myDate(0) {} + EbmlDate(const EbmlDate & ElementToClone); - /*! - \brief set the date with a UNIX/C/EPOCH form - \param NewDate UNIX/C date in UTC (no timezone) - */ - void SetEpochDate(int64 NewDate) {myDate = (NewDate - UnixEpochDelay) * 1000000000; SetValueIsSet();} + /*! + \brief set the date with a UNIX/C/EPOCH form + \param NewDate UNIX/C date in UTC (no timezone) + */ + void SetEpochDate(int64 NewDate) {myDate = (NewDate - UnixEpochDelay) * 1000000000; SetValueIsSet();} EbmlDate &SetValue(int64 NewValue) {SetEpochDate(NewValue); return *this;} - /*! - \brief get the date with a UNIX/C/EPOCH form - \note the date is in UTC (no timezone) - */ - int64 GetEpochDate() const {return int64(myDate/1000000000 + UnixEpochDelay);} + /*! + \brief get the date with a UNIX/C/EPOCH form + \note the date is in UTC (no timezone) + */ + int64 GetEpochDate() const {return int64(myDate/1000000000 + UnixEpochDelay);} int64 GetValue() const {return GetEpochDate();} - virtual bool ValidateSize() const {return IsFiniteSize() && ((GetSize() == 8) || (GetSize() == 0));} + virtual bool ValidateSize() const {return IsFiniteSize() && ((GetSize() == 8) || (GetSize() == 0));} - /*! - \note no Default date handled - */ - filepos_t UpdateSize(bool /* bWithDefault = false */, bool /* bForceRender = false */) { - if(!ValueIsSet()) - SetSize_(0); - else - SetSize_(8); - return GetSize(); - } + /*! + \note no Default date handled + */ + filepos_t UpdateSize(bool /* bWithDefault = false */, bool /* bForceRender = false */) { + if(!ValueIsSet()) + SetSize_(0); + else + SetSize_(8); + return GetSize(); + } - virtual bool IsSmallerThan(const EbmlElement *Cmp) const; + virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - bool IsDefaultValue() const { - return false; - } + bool IsDefaultValue() const { + return false; + } #if defined(EBML_STRICT_API) private: #else protected: #endif - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - int64 myDate; ///< internal format of the date + int64 myDate; ///< internal format of the date - static const uint64 UnixEpochDelay; + static const uint64 UnixEpochDelay; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlDummy.h b/ebml/EbmlDummy.h index 861e192..7047169 100644 --- a/ebml/EbmlDummy.h +++ b/ebml/EbmlDummy.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_DUMMY_H #define LIBEBML_DUMMY_H @@ -41,13 +41,13 @@ START_LIBEBML_NAMESPACE class EBML_DLL_API EbmlDummy : public EbmlBinary { - public: - EbmlDummy() :DummyId(DummyRawId) {} - EbmlDummy(const EbmlId & aId) :EbmlBinary(), DummyId(aId) {} - EbmlDummy(const EbmlDummy & ElementToClone):EbmlBinary(ElementToClone), DummyId(ElementToClone.DummyId) {} + public: + EbmlDummy() :DummyId(DummyRawId) {} + EbmlDummy(const EbmlId & aId) :EbmlBinary(), DummyId(aId) {} + EbmlDummy(const EbmlDummy & ElementToClone):EbmlBinary(ElementToClone), DummyId(ElementToClone.DummyId) {} - bool IsDummy() const {return true;} - bool IsDefaultValue() const {return true;} + bool IsDummy() const {return true;} + bool IsDefaultValue() const {return true;} virtual operator const EbmlId &() const { return DummyId; @@ -58,8 +58,8 @@ class EBML_DLL_API EbmlDummy : public EbmlBinary { #else protected: #endif - const EbmlId DummyId; - static const EbmlId DummyRawId; + const EbmlId DummyId; + static const EbmlId DummyRawId; EBML_CONCRETE_DUMMY_CLASS(EbmlDummy) }; diff --git a/ebml/EbmlElement.h b/ebml/EbmlElement.h index 1079d92..5a42b47 100644 --- a/ebml/EbmlElement.h +++ b/ebml/EbmlElement.h @@ -27,9 +27,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_ELEMENT_H #define LIBEBML_ELEMENT_H @@ -41,36 +41,36 @@ START_LIBEBML_NAMESPACE /*! - \brief The size of the EBML-coded length + \brief The size of the EBML-coded length */ int EBML_DLL_API CodedSizeLength(uint64 Length, unsigned int SizeLength, bool bSizeIsFinite = true); /*! - \brief The coded value of the EBML-coded length - \note The size of OutBuffer must be 8 octets at least + \brief The coded value of the EBML-coded length + \note The size of OutBuffer must be 8 octets at least */ int EBML_DLL_API CodedValueLength(uint64 Length, int CodedSize, binary * OutBuffer); /*! - \brief Read an EBML-coded value from a buffer - \return the value read + \brief Read an EBML-coded value from a buffer + \return the value read */ uint64 EBML_DLL_API ReadCodedSizeValue(const binary * InBuffer, uint32 & BufferSize, uint64 & SizeUnknown); /*! - \brief The size of the EBML-coded signed length + \brief The size of the EBML-coded signed length */ int EBML_DLL_API CodedSizeLengthSigned(int64 Length, unsigned int SizeLength); /*! - \brief The coded value of the EBML-coded signed length - \note the size of OutBuffer must be 8 octets at least + \brief The coded value of the EBML-coded signed length + \note the size of OutBuffer must be 8 octets at least */ int EBML_DLL_API CodedValueLengthSigned(int64 Length, int CodedSize, binary * OutBuffer); /*! - \brief Read a signed EBML-coded value from a buffer - \return the value read + \brief Read a signed EBML-coded value from a buffer + \return the value read */ int64 EBML_DLL_API ReadCodedSizeSignedValue(const binary * InBuffer, uint32 & BufferSize, uint64 & SizeUnknown); @@ -176,25 +176,25 @@ extern const EbmlSemanticContext Context_EbmlGlobal; public: \ virtual const EbmlSemanticContext &Context() const {return ClassInfos.GetContext();} \ virtual const char *DebugName() const {return ClassInfos.GetName();} \ - virtual operator const EbmlId &() const {return ClassInfos.ClassId();} \ + virtual operator const EbmlId &() const {return ClassInfos.ClassId();} \ virtual EbmlElement & CreateElement() const {return Create();} \ virtual EbmlElement * Clone() const { return new Type(*this); } \ - static EbmlElement & Create() {return *(new Type);} \ + static EbmlElement & Create() {return *(new Type);} \ static const EbmlCallbacks & ClassInfo() {return ClassInfos;} \ static const EbmlId & ClassId() {return ClassInfos.ClassId();} \ private: \ - static const EbmlCallbacks ClassInfos; \ + static const EbmlCallbacks ClassInfos; \ #define EBML_CONCRETE_DUMMY_CLASS(Type) \ public: \ virtual const EbmlSemanticContext &Context() const {return *static_cast(NULL);} \ virtual const char *DebugName() const {return "DummyElement";} \ - virtual operator const EbmlId &(); \ + virtual operator const EbmlId &(); \ virtual EbmlElement & CreateElement() const {return Create();} \ virtual EbmlElement * Clone() const { return new Type(*this); } \ - static EbmlElement & Create() {return *(new Type);} \ + static EbmlElement & Create() {return *(new Type);} \ static const EbmlId & ClassId(); \ - static const EbmlCallbacks ClassInfos; \ + static const EbmlCallbacks ClassInfos; \ #define EBML_INFO(ref) ref::ClassInfo() @@ -223,21 +223,21 @@ extern const EbmlSemanticContext Context_EbmlGlobal; #else #define EBML_CONCRETE_CLASS(Type) \ public: \ - virtual const EbmlCallbacks & Generic() const {return ClassInfos;} \ - virtual operator const EbmlId &() const {return ClassInfos.GlobalId;} \ + virtual const EbmlCallbacks & Generic() const {return ClassInfos;} \ + virtual operator const EbmlId &() const {return ClassInfos.GlobalId;} \ virtual EbmlElement & CreateElement() const {return Create();} \ virtual EbmlElement * Clone() const { return new Type(*this); } \ - static EbmlElement & Create() {return *(new Type);} \ - static const EbmlCallbacks ClassInfos; \ + static EbmlElement & Create() {return *(new Type);} \ + static const EbmlCallbacks ClassInfos; \ #define EBML_CONCRETE_DUMMY_CLASS(Type) \ public: \ - virtual const EbmlCallbacks & Generic() const {return ClassInfos;} \ - virtual operator const EbmlId &(); \ + virtual const EbmlCallbacks & Generic() const {return ClassInfos;} \ + virtual operator const EbmlId &(); \ virtual EbmlElement & CreateElement() const {return Create();} \ virtual EbmlElement * Clone() const { return new Type(*this); } \ - static EbmlElement & Create() {return *(new Type);} \ - static const EbmlCallbacks ClassInfos; \ + static EbmlElement & Create() {return *(new Type);} \ + static const EbmlCallbacks ClassInfos; \ #define EBML_INFO(ref) ref::ClassInfos @@ -282,11 +282,11 @@ extern const EbmlSemanticContext Context_EbmlGlobal; // functions for generic handling of data (should be static to all classes) /*! - \todo Handle default value + \todo Handle default value */ class EBML_DLL_API EbmlCallbacks { - public: - EbmlCallbacks(EbmlElement & (*Creator)(), const EbmlId & aGlobalId, const char * aDebugName, const EbmlSemanticContext & aContext); + public: + EbmlCallbacks(EbmlElement & (*Creator)(), const EbmlId & aGlobalId, const char * aDebugName, const EbmlSemanticContext & aContext); inline const EbmlId & ClassId() const { return GlobalId; } inline const EbmlSemanticContext & GetContext() const { return Context; } @@ -296,20 +296,20 @@ class EBML_DLL_API EbmlCallbacks { #if defined(EBML_STRICT_API) private: #endif - EbmlElement & (*Create)(); - const EbmlId & GlobalId; - const char * DebugName; - const EbmlSemanticContext & Context; + EbmlElement & (*Create)(); + const EbmlId & GlobalId; + const char * DebugName; + const EbmlSemanticContext & Context; }; /*! - \brief contains the semantic informations for a given level and all sublevels - \todo move the ID in the element class + \brief contains the semantic informations for a given level and all sublevels + \todo move the ID in the element class */ class EBML_DLL_API EbmlSemantic { - public: - EbmlSemantic(bool aMandatory, bool aUnique, const EbmlCallbacks & aGetCallbacks) - :Mandatory(aMandatory), Unique(aUnique), GetCallbacks(aGetCallbacks) {} + public: + EbmlSemantic(bool aMandatory, bool aUnique, const EbmlCallbacks & aGetCallbacks) + :Mandatory(aMandatory), Unique(aUnique), GetCallbacks(aGetCallbacks) {} inline bool IsMandatory() const { return Mandatory; } inline bool IsUnique() const { return Unique; } @@ -319,172 +319,172 @@ class EBML_DLL_API EbmlSemantic { #if defined(EBML_STRICT_API) private: #endif - bool Mandatory; ///< wether the element is mandatory in the context or not - bool Unique; - const EbmlCallbacks & GetCallbacks; + bool Mandatory; ///< wether the element is mandatory in the context or not + bool Unique; + const EbmlCallbacks & GetCallbacks; }; typedef const class EbmlSemanticContext & (*_GetSemanticContext)(); /*! - Context of the element - \todo allow more than one parent ? + Context of the element + \todo allow more than one parent ? */ class EBML_DLL_API EbmlSemanticContext { - public: - EbmlSemanticContext(size_t aSize, - const EbmlSemantic *aMyTable, - const EbmlSemanticContext *aUpTable, - const _GetSemanticContext aGetGlobalContext, - const EbmlCallbacks *aMasterElt) - : GetGlobalContext(aGetGlobalContext), MyTable(aMyTable), Size(aSize), - UpTable(aUpTable), MasterElt(aMasterElt) {} + public: + EbmlSemanticContext(size_t aSize, + const EbmlSemantic *aMyTable, + const EbmlSemanticContext *aUpTable, + const _GetSemanticContext aGetGlobalContext, + const EbmlCallbacks *aMasterElt) + : GetGlobalContext(aGetGlobalContext), MyTable(aMyTable), Size(aSize), + UpTable(aUpTable), MasterElt(aMasterElt) {} - bool operator!=(const EbmlSemanticContext & aElt) const { - return ((Size != aElt.Size) || (MyTable != aElt.MyTable) || - (UpTable != aElt.UpTable) || (GetGlobalContext != aElt.GetGlobalContext) | - (MasterElt != aElt.MasterElt)); - } + bool operator!=(const EbmlSemanticContext & aElt) const { + return ((Size != aElt.Size) || (MyTable != aElt.MyTable) || + (UpTable != aElt.UpTable) || (GetGlobalContext != aElt.GetGlobalContext) | + (MasterElt != aElt.MasterElt)); + } inline size_t GetSize() const { return Size; } inline const EbmlCallbacks* GetMaster() const { return MasterElt; } inline const EbmlSemanticContext* Parent() const { return UpTable; } const EbmlSemantic & GetSemantic(size_t i) const; - const _GetSemanticContext GetGlobalContext; ///< global elements supported at this level + const _GetSemanticContext GetGlobalContext; ///< global elements supported at this level #if defined(EBML_STRICT_API) private: #endif const EbmlSemantic *MyTable; ///< First element in the table - size_t Size; ///< number of elements in the table - const EbmlSemanticContext *UpTable; ///< Parent element - /// \todo replace with the global context directly - const EbmlCallbacks *MasterElt; + size_t Size; ///< number of elements in the table + const EbmlSemanticContext *UpTable; ///< Parent element + /// \todo replace with the global context directly + const EbmlCallbacks *MasterElt; }; /*! - \class EbmlElement - \brief Hold basic informations about an EBML element (ID + length) + \class EbmlElement + \brief Hold basic informations about an EBML element (ID + length) */ class EBML_DLL_API EbmlElement { - public: - EbmlElement(uint64 aDefaultSize, bool bValueSet = false); - virtual ~EbmlElement(); + public: + EbmlElement(uint64 aDefaultSize, bool bValueSet = false); + virtual ~EbmlElement(); - /// Set the minimum length that will be used to write the element size (-1 = optimal) - void SetSizeLength(int NewSizeLength) {SizeLength = NewSizeLength;} - int GetSizeLength() const {return SizeLength;} + /// Set the minimum length that will be used to write the element size (-1 = optimal) + void SetSizeLength(int NewSizeLength) {SizeLength = NewSizeLength;} + int GetSizeLength() const {return SizeLength;} - static EbmlElement * FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1); - static EbmlElement * FindNextID(IOCallback & DataStream, const EbmlCallbacks & ClassInfos, uint64 MaxDataSize); + static EbmlElement * FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1); + static EbmlElement * FindNextID(IOCallback & DataStream, const EbmlCallbacks & ClassInfos, uint64 MaxDataSize); - /*! - \brief find the next element with the same ID - */ - EbmlElement * FindNext(IOCallback & DataStream, uint64 MaxDataSize); + /*! + \brief find the next element with the same ID + */ + EbmlElement * FindNext(IOCallback & DataStream, uint64 MaxDataSize); - EbmlElement * SkipData(EbmlStream & DataStream, const EbmlSemanticContext & Context, EbmlElement * TestReadElt = NULL, bool AllowDummyElt = false); + EbmlElement * SkipData(EbmlStream & DataStream, const EbmlSemanticContext & Context, EbmlElement * TestReadElt = NULL, bool AllowDummyElt = false); - /*! - \brief Give a copy of the element, all data inside the element is copied - \return NULL if there is not enough memory - */ - virtual EbmlElement * Clone() const = 0; + /*! + \brief Give a copy of the element, all data inside the element is copied + \return NULL if there is not enough memory + */ + virtual EbmlElement * Clone() const = 0; - virtual operator const EbmlId &() const = 0; + virtual operator const EbmlId &() const = 0; #if defined(EBML_STRICT_API) virtual const char *DebugName() const = 0; virtual const EbmlSemanticContext &Context() const = 0; #else - /// return the generic callback to monitor a derived class - virtual const EbmlCallbacks & Generic() const = 0; + /// return the generic callback to monitor a derived class + virtual const EbmlCallbacks & Generic() const = 0; #endif virtual EbmlElement & CreateElement() const = 0; - // by default only allow to set element as finite (override when needed) - virtual bool SetSizeInfinite(bool bIsInfinite = true) {return !bIsInfinite;} + // by default only allow to set element as finite (override when needed) + virtual bool SetSizeInfinite(bool bIsInfinite = true) {return !bIsInfinite;} - virtual bool ValidateSize() const = 0; + virtual bool ValidateSize() const = 0; - uint64 GetElementPosition() const { - return ElementPosition; - } + uint64 GetElementPosition() const { + return ElementPosition; + } - uint64 ElementSize(bool bWithDefault = false) const; /// return the size of the header+data, before writing + uint64 ElementSize(bool bWithDefault = false) const; /// return the size of the header+data, before writing - filepos_t Render(IOCallback & output, bool bWithDefault = false, bool bKeepPosition = false, bool bForceRender = false); + filepos_t Render(IOCallback & output, bool bWithDefault = false, bool bKeepPosition = false, bool bForceRender = false); - virtual filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false) = 0; /// update the Size of the Data stored - virtual filepos_t GetSize() const {return Size;} /// return the size of the data stored in the element, on reading + virtual filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false) = 0; /// update the Size of the Data stored + virtual filepos_t GetSize() const {return Size;} /// return the size of the data stored in the element, on reading - virtual filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA) = 0; - virtual void Read(EbmlStream & inDataStream, const EbmlSemanticContext & Context, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt = false, ScopeMode ReadFully = SCOPE_ALL_DATA); + virtual filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA) = 0; + virtual void Read(EbmlStream & inDataStream, const EbmlSemanticContext & Context, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt = false, ScopeMode ReadFully = SCOPE_ALL_DATA); - bool IsLocked() const {return bLocked;} - void Lock(bool bLock = true) { bLocked = bLock;} + bool IsLocked() const {return bLocked;} + void Lock(bool bLock = true) { bLocked = bLock;} - /*! - \brief default comparison for elements that can't be compared - */ - virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - static bool CompareElements(const EbmlElement *A, const EbmlElement *B); + /*! + \brief default comparison for elements that can't be compared + */ + virtual bool IsSmallerThan(const EbmlElement *Cmp) const; + static bool CompareElements(const EbmlElement *A, const EbmlElement *B); - virtual bool IsDummy() const {return false;} - virtual bool IsMaster() const {return false;} + virtual bool IsDummy() const {return false;} + virtual bool IsMaster() const {return false;} - uint8 HeadSize() const { - return EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite); - } /// return the size of the head, on reading/writing + uint8 HeadSize() const { + return EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite); + } /// return the size of the head, on reading/writing - /*! - \brief Force the size of an element - \warning only possible if the size is "undefined" - */ - bool ForceSize(uint64 NewSize); + /*! + \brief Force the size of an element + \warning only possible if the size is "undefined" + */ + bool ForceSize(uint64 NewSize); - filepos_t OverwriteHead(IOCallback & output, bool bKeepPosition = false); + filepos_t OverwriteHead(IOCallback & output, bool bKeepPosition = false); - /*! - \brief void the content of the element (replace by EbmlVoid) - */ - uint64 VoidMe(IOCallback & output, bool bWithDefault = false); + /*! + \brief void the content of the element (replace by EbmlVoid) + */ + uint64 VoidMe(IOCallback & output, bool bWithDefault = false); - bool DefaultISset() const {return DefaultIsSet;} - virtual bool IsDefaultValue() const = 0; - bool IsFiniteSize() const {return bSizeIsFinite;} + bool DefaultISset() const {return DefaultIsSet;} + virtual bool IsDefaultValue() const = 0; + bool IsFiniteSize() const {return bSizeIsFinite;} - /*! - \brief set the default size of an element - */ - virtual void SetDefaultSize(uint64 aDefaultSize) {DefaultSize = aDefaultSize;} + /*! + \brief set the default size of an element + */ + virtual void SetDefaultSize(uint64 aDefaultSize) {DefaultSize = aDefaultSize;} - bool ValueIsSet() const {return bValueIsSet;} + bool ValueIsSet() const {return bValueIsSet;} - inline uint64 GetEndPosition() const { - assert(bSizeIsFinite); // we don't know where the end is - return SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size; - } + inline uint64 GetEndPosition() const { + assert(bSizeIsFinite); // we don't know where the end is + return SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size; + } - protected: - /*! - \brief find any element in the stream - \return a DummyRawElement if the element is unknown or NULL if the element dummy is not allowed - */ - static EbmlElement *CreateElementUsingContext(const EbmlId & aID, const EbmlSemanticContext & Context, int & LowLevel, bool IsGlobalContext, bool bAllowDummy = false, unsigned int MaxLowerLevel = 1); + protected: + /*! + \brief find any element in the stream + \return a DummyRawElement if the element is unknown or NULL if the element dummy is not allowed + */ + static EbmlElement *CreateElementUsingContext(const EbmlId & aID, const EbmlSemanticContext & Context, int & LowLevel, bool IsGlobalContext, bool bAllowDummy = false, unsigned int MaxLowerLevel = 1); - filepos_t RenderHead(IOCallback & output, bool bForceRender, bool bWithDefault = false, bool bKeepPosition = false); - filepos_t MakeRenderHead(IOCallback & output, bool bKeepPosition); + filepos_t RenderHead(IOCallback & output, bool bForceRender, bool bWithDefault = false, bool bKeepPosition = false); + filepos_t MakeRenderHead(IOCallback & output, bool bKeepPosition); - /*! - \brief prepare the data before writing them (in case it's not already done by default) - */ - virtual filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false) = 0; + /*! + \brief prepare the data before writing them (in case it's not already done by default) + */ + virtual filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false) = 0; - /*! - \brief special constructor for cloning - */ - EbmlElement(const EbmlElement & ElementToClone); + /*! + \brief special constructor for cloning + */ + EbmlElement(const EbmlElement & ElementToClone); inline uint64 GetDefaultSize() const {return DefaultSize;} inline void SetSize_(uint64 aSize) {Size = aSize;} @@ -494,17 +494,17 @@ class EBML_DLL_API EbmlElement { inline uint64 GetSizePosition() const {return SizePosition;} #if defined(EBML_STRICT_API) - private: + private: #endif - uint64 Size; ///< the size of the data to write - uint64 DefaultSize; ///< Minimum data size to fill on rendering (0 = optimal) - int SizeLength; /// the minimum size on which the size will be written (0 = optimal) - bool bSizeIsFinite; - uint64 ElementPosition; - uint64 SizePosition; - bool bValueIsSet; - bool DefaultIsSet; - bool bLocked; + uint64 Size; ///< the size of the data to write + uint64 DefaultSize; ///< Minimum data size to fill on rendering (0 = optimal) + int SizeLength; /// the minimum size on which the size will be written (0 = optimal) + bool bSizeIsFinite; + uint64 ElementPosition; + uint64 SizePosition; + bool bValueIsSet; + bool DefaultIsSet; + bool bLocked; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlEndian.h b/ebml/EbmlEndian.h index 7bc9e1b..81e3752 100644 --- a/ebml/EbmlEndian.h +++ b/ebml/EbmlEndian.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -58,63 +58,63 @@ enum endianess { template class Endian { public: - Endian() {} + Endian() {} - Endian(const TYPE value) - { - memcpy(&platform_value, &value, sizeof(TYPE)); - process_endian(); - } + Endian(const TYPE value) + { + memcpy(&platform_value, &value, sizeof(TYPE)); + process_endian(); + } - inline Endian & Eval(const binary *endian_buffer) - { - //endian_value = *(TYPE *)(endian_buffer); - memcpy(&endian_value, endian_buffer, sizeof(TYPE)); // Some (all?) RISC processors do not allow reading objects bigger than 1 byte from non-aligned addresses, and endian_buffer may point to a non-aligned address. - process_platform(); - return *this; - } + inline Endian & Eval(const binary *endian_buffer) + { + //endian_value = *(TYPE *)(endian_buffer); + memcpy(&endian_value, endian_buffer, sizeof(TYPE)); // Some (all?) RISC processors do not allow reading objects bigger than 1 byte from non-aligned addresses, and endian_buffer may point to a non-aligned address. + process_platform(); + return *this; + } - inline void Fill(binary *endian_buffer) const - { - //*(TYPE*)endian_buffer = endian_value; - memcpy(endian_buffer, &endian_value, sizeof(TYPE)); // See above. - } + inline void Fill(binary *endian_buffer) const + { + //*(TYPE*)endian_buffer = endian_value; + memcpy(endian_buffer, &endian_value, sizeof(TYPE)); // See above. + } - inline operator const TYPE&() const { return platform_value; } - // inline TYPE endian() const { return endian_value; } - inline const TYPE &endian() const { return endian_value; } - inline size_t size() const { return sizeof(TYPE); } - inline bool operator!=(const binary *buffer) const {return *((TYPE*)buffer) == platform_value;} + inline operator const TYPE&() const { return platform_value; } + // inline TYPE endian() const { return endian_value; } + inline const TYPE &endian() const { return endian_value; } + inline size_t size() const { return sizeof(TYPE); } + inline bool operator!=(const binary *buffer) const {return *((TYPE*)buffer) == platform_value;} #if defined(EBML_STRICT_API) private: #else protected: #endif - TYPE platform_value; - TYPE endian_value; + TYPE platform_value; + TYPE endian_value; - inline void process_endian() - { - endian_value = platform_value; + inline void process_endian() + { + endian_value = platform_value; #ifdef WORDS_BIGENDIAN - if (ENDIAN == little_endian) + if (ENDIAN == little_endian) #else // _ENDIANESS_ - if (ENDIAN == big_endian) + if (ENDIAN == big_endian) #endif // _ENDIANESS_ - std::reverse(reinterpret_cast(&endian_value),reinterpret_cast(&endian_value+1)); - } + std::reverse(reinterpret_cast(&endian_value),reinterpret_cast(&endian_value+1)); + } - inline void process_platform() - { - platform_value = endian_value; + inline void process_platform() + { + platform_value = endian_value; #ifdef WORDS_BIGENDIAN - if (ENDIAN == little_endian) + if (ENDIAN == little_endian) #else // _ENDIANESS_ - if (ENDIAN == big_endian) + if (ENDIAN == big_endian) #endif // _ENDIANESS_ - std::reverse(reinterpret_cast(&platform_value),reinterpret_cast(&platform_value+1)); - } + std::reverse(reinterpret_cast(&platform_value),reinterpret_cast(&platform_value+1)); + } }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlFloat.h b/ebml/EbmlFloat.h index 24fcb46..7b338ae 100644 --- a/ebml/EbmlFloat.h +++ b/ebml/EbmlFloat.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_FLOAT_H #define LIBEBML_FLOAT_H @@ -46,60 +46,60 @@ START_LIBEBML_NAMESPACE \brief Handle all operations on a float EBML element */ class EBML_DLL_API EbmlFloat : public EbmlElement { - public: - enum Precision { - FLOAT_32 - ,FLOAT_64 - }; + public: + enum Precision { + FLOAT_32 + ,FLOAT_64 + }; - EbmlFloat(const Precision prec = FLOAT_32); - EbmlFloat(const double DefaultValue, const Precision prec = FLOAT_32); - EbmlFloat(const EbmlFloat & ElementToClone); + EbmlFloat(const Precision prec = FLOAT_32); + EbmlFloat(const double DefaultValue, const Precision prec = FLOAT_32); + EbmlFloat(const EbmlFloat & ElementToClone); - virtual bool ValidateSize() const - { - return (GetSize() == 4 || GetSize() == 8); - } - - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); + virtual bool ValidateSize() const + { + return (GetSize() == 4 || GetSize() == 8); + } - void SetPrecision(const EbmlFloat::Precision prec = FLOAT_32) - { - if (prec == FLOAT_64) - SetSize_(8); - else - SetSize_(4); // default size - } + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - -// EbmlFloat & operator=(const float NewValue) { Value = NewValue; return *this;} - EbmlFloat & operator=(const double NewValue) { Value = NewValue; SetValueIsSet(); return *this;} + void SetPrecision(const EbmlFloat::Precision prec = FLOAT_32) + { + if (prec == FLOAT_64) + SetSize_(8); + else + SetSize_(4); // default size + } - virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - - operator float() const; - operator double() const; - EbmlFloat &SetValue(double NewValue); - double GetValue() const; +// EbmlFloat & operator=(const float NewValue) { Value = NewValue; return *this;} + EbmlFloat & operator=(const double NewValue) { Value = NewValue; SetValueIsSet(); return *this;} - void SetDefaultValue(double); - - double DefaultVal() const; + virtual bool IsSmallerThan(const EbmlElement *Cmp) const; + + operator float() const; + operator double() const; + + EbmlFloat &SetValue(double NewValue); + double GetValue() const; + + void SetDefaultValue(double); + + double DefaultVal() const; + + bool IsDefaultValue() const { + return (DefaultISset() && Value == DefaultValue); + } - bool IsDefaultValue() const { - return (DefaultISset() && Value == DefaultValue); - } - #if defined(EBML_STRICT_API) private: #else protected: #endif - double Value; /// The actual value of the element - double DefaultValue; + double Value; /// The actual value of the element + double DefaultValue; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlHead.h b/ebml/EbmlHead.h index ab8998c..7e7f67a 100644 --- a/ebml/EbmlHead.h +++ b/ebml/EbmlHead.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlHead.h 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlHead.h 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme */ #ifndef LIBEBML_HEAD_H #define LIBEBML_HEAD_H @@ -42,8 +42,8 @@ START_LIBEBML_NAMESPACE DECLARE_EBML_MASTER(EbmlHead) - public: - EbmlHead(const EbmlHead & ElementToClone) : EbmlMaster(ElementToClone) {} + public: + EbmlHead(const EbmlHead & ElementToClone) : EbmlMaster(ElementToClone) {} EBML_CONCRETE_CLASS(EbmlHead) }; diff --git a/ebml/EbmlId.h b/ebml/EbmlId.h index 4e9ee44..7202b77 100644 --- a/ebml/EbmlId.h +++ b/ebml/EbmlId.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlId.h 936 2004-11-10 20:46:28Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlId.h 936 2004-11-10 20:46:28Z mosu $ + \author Steve Lhomme */ #ifndef LIBEBML_ID_H #define LIBEBML_ID_H @@ -50,39 +50,39 @@ START_LIBEBML_NAMESPACE #endif /*! - \class EbmlId + \class EbmlId */ class EBML_DLL_API EbmlId { - public: - EbmlId(const binary aValue[4], const unsigned int aLength) - :Length(aLength) - { - Value = 0; - unsigned int i; - for (i=0; i> (8*(Length-i-1))) & 0xFF; - } - } + inline void Fill(binary * Buffer) const { + unsigned int i; + for (i = 0; i> (8*(Length-i-1))) & 0xFF; + } + } inline size_t GetLength() const { return Length; } inline uint32 GetValue() const { return Value; } @@ -90,8 +90,8 @@ class EBML_DLL_API EbmlId { #if defined(EBML_STRICT_API) private: #endif - uint32 Value; - size_t Length; + uint32 Value; + size_t Length; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlMaster.h b/ebml/EbmlMaster.h index 95bb5ad..d6bc948 100644 --- a/ebml/EbmlMaster.h +++ b/ebml/EbmlMaster.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlMaster.h 1232 2005-10-15 15:56:52Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlMaster.h 1232 2005-10-15 15:56:52Z robux4 $ + \author Steve Lhomme */ #ifndef LIBEBML_MASTER_H #define LIBEBML_MASTER_H @@ -57,70 +57,70 @@ const bool bChecksumUsedByDefault = false; \brief Handle all operations on an EBML element that contains other EBML elements */ class EBML_DLL_API EbmlMaster : public EbmlElement { - public: - EbmlMaster(const EbmlSemanticContext & aContext, bool bSizeIsKnown = true); - EbmlMaster(const EbmlMaster & ElementToClone); - virtual bool ValidateSize() const {return true;} - /*! - \warning be carefull to clear the memory allocated in the ElementList elsewhere - */ - virtual ~EbmlMaster(); - - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - - /*! - \brief Set wether the size is finite (size is known in advance when writing, or infinite size is not known on writing) - */ - bool SetSizeInfinite(bool aIsInfinite = true) {SetSizeIsFinite(!aIsInfinite); return true;} - - bool PushElement(EbmlElement & element); - uint64 GetSize() const { - if (IsFiniteSize()) + public: + EbmlMaster(const EbmlSemanticContext & aContext, bool bSizeIsKnown = true); + EbmlMaster(const EbmlMaster & ElementToClone); + virtual bool ValidateSize() const {return true;} + /*! + \warning be carefull to clear the memory allocated in the ElementList elsewhere + */ + virtual ~EbmlMaster(); + + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); + + /*! + \brief Set wether the size is finite (size is known in advance when writing, or infinite size is not known on writing) + */ + bool SetSizeInfinite(bool aIsInfinite = true) {SetSizeIsFinite(!aIsInfinite); return true;} + + bool PushElement(EbmlElement & element); + uint64 GetSize() const { + if (IsFiniteSize()) return EbmlElement::GetSize(); - else - return (0-1); - } - - uint64 GetDataStart() const { - return GetElementPosition() + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()); - } + else + return (0-1); + } - /*! - \brief find the element corresponding to the ID of the element, NULL if not found - */ - EbmlElement *FindElt(const EbmlCallbacks & Callbacks) const; - /*! - \brief find the first element corresponding to the ID of the element - */ - EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks, bool bCreateIfNull); - EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks) const; + uint64 GetDataStart() const { + return GetElementPosition() + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()); + } - /*! - \brief find the element of the same type of PasElt following in the list of elements - */ - EbmlElement *FindNextElt(const EbmlElement & PastElt, bool bCreateIfNull); - EbmlElement *FindNextElt(const EbmlElement & PastElt) const; - EbmlElement *AddNewElt(const EbmlCallbacks & Callbacks); + /*! + \brief find the element corresponding to the ID of the element, NULL if not found + */ + EbmlElement *FindElt(const EbmlCallbacks & Callbacks) const; + /*! + \brief find the first element corresponding to the ID of the element + */ + EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks, bool bCreateIfNull); + EbmlElement *FindFirstElt(const EbmlCallbacks & Callbacks) const; - /*! - \brief add an element at a specified location - */ - bool InsertElement(EbmlElement & element, size_t position = 0); - bool InsertElement(EbmlElement & element, const EbmlElement & before); + /*! + \brief find the element of the same type of PasElt following in the list of elements + */ + EbmlElement *FindNextElt(const EbmlElement & PastElt, bool bCreateIfNull); + EbmlElement *FindNextElt(const EbmlElement & PastElt) const; + EbmlElement *AddNewElt(const EbmlCallbacks & Callbacks); - /*! - \brief Read the data and keep the known children - */ - void Read(EbmlStream & inDataStream, const EbmlSemanticContext & Context, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt, ScopeMode ReadFully = SCOPE_ALL_DATA); - - /*! - \brief sort Data when they can - */ - void Sort(); + /*! + \brief add an element at a specified location + */ + bool InsertElement(EbmlElement & element, size_t position = 0); + bool InsertElement(EbmlElement & element, const EbmlElement & before); - size_t ListSize() const {return ElementList.size();} + /*! + \brief Read the data and keep the known children + */ + void Read(EbmlStream & inDataStream, const EbmlSemanticContext & Context, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt, ScopeMode ReadFully = SCOPE_ALL_DATA); + + /*! + \brief sort Data when they can + */ + void Sort(); + + size_t ListSize() const {return ElementList.size();} std::vector const &GetElementList() const {return ElementList;} std::vector &GetElementList() {return ElementList;} @@ -133,76 +133,76 @@ class EBML_DLL_API EbmlMaster : public EbmlElement { inline EBML_MASTER_CONST_RITERATOR rbegin() const {return ElementList.rbegin();} inline EBML_MASTER_CONST_RITERATOR rend() const {return ElementList.rend();} - EbmlElement * operator[](unsigned int position) {return ElementList[position];} - const EbmlElement * operator[](unsigned int position) const {return ElementList[position];} + EbmlElement * operator[](unsigned int position) {return ElementList[position];} + const EbmlElement * operator[](unsigned int position) const {return ElementList[position];} - bool IsDefaultValue() const { - return (ElementList.size() == 0); - } - virtual bool IsMaster() const {return true;} + bool IsDefaultValue() const { + return (ElementList.size() == 0); + } + virtual bool IsMaster() const {return true;} - /*! - \brief verify that all mandatory elements are present - \note usefull after reading or before writing - */ - bool CheckMandatory() const; + /*! + \brief verify that all mandatory elements are present + \note usefull after reading or before writing + */ + bool CheckMandatory() const; - /*! - \brief Remove an element from the list of the master - */ - void Remove(size_t Index); - void Remove(EBML_MASTER_ITERATOR & Itr); - void Remove(EBML_MASTER_RITERATOR & Itr); + /*! + \brief Remove an element from the list of the master + */ + void Remove(size_t Index); + void Remove(EBML_MASTER_ITERATOR & Itr); + void Remove(EBML_MASTER_RITERATOR & Itr); - /*! - \brief remove all elements, even the mandatory ones - */ - void RemoveAll() {ElementList.clear();} + /*! + \brief remove all elements, even the mandatory ones + */ + void RemoveAll() {ElementList.clear();} - /*! - \brief facility for Master elements to write only the head and force the size later - \warning - */ - filepos_t WriteHead(IOCallback & output, int SizeLength, bool bWithDefault = false); + /*! + \brief facility for Master elements to write only the head and force the size later + \warning + */ + filepos_t WriteHead(IOCallback & output, int SizeLength, bool bWithDefault = false); - void EnableChecksum(bool bIsEnabled = true) { bChecksumUsed = bIsEnabled; } - bool HasChecksum() const {return bChecksumUsed;} - bool VerifyChecksum() const; - uint32 GetCrc32() const {return Checksum.GetCrc32();} - void ForceChecksum(uint32 NewChecksum) { - Checksum.ForceCrc32(NewChecksum); - bChecksumUsed = true; - } + void EnableChecksum(bool bIsEnabled = true) { bChecksumUsed = bIsEnabled; } + bool HasChecksum() const {return bChecksumUsed;} + bool VerifyChecksum() const; + uint32 GetCrc32() const {return Checksum.GetCrc32();} + void ForceChecksum(uint32 NewChecksum) { + Checksum.ForceCrc32(NewChecksum); + bChecksumUsed = true; + } - /*! - \brief drill down all sub-elements, finding any missing elements - */ - std::vector FindAllMissingElements(); + /*! + \brief drill down all sub-elements, finding any missing elements + */ + std::vector FindAllMissingElements(); #if defined(EBML_STRICT_API) private: #else protected: #endif - std::vector ElementList; - - const EbmlSemanticContext & Context; + std::vector ElementList; - bool bChecksumUsed; - EbmlCrc32 Checksum; - - private: - /*! - \brief Add all the mandatory elements to the list - */ - bool ProcessMandatory(); + const EbmlSemanticContext & Context; + + bool bChecksumUsed; + EbmlCrc32 Checksum; + + private: + /*! + \brief Add all the mandatory elements to the list + */ + bool ProcessMandatory(); }; ///< \todo add a restriction to only elements legal in the context template Type & GetChild(EbmlMaster & Master) { - return *(static_cast(Master.FindFirstElt(EBML_INFO(Type), true))); + return *(static_cast(Master.FindFirstElt(EBML_INFO(Type), true))); } // call with // MyDocType = GetChild(TestHead); @@ -210,19 +210,19 @@ Type & GetChild(EbmlMaster & Master) template Type * FindChild(EbmlMaster & Master) { - return static_cast(Master.FindFirstElt(EBML_INFO(Type), false)); + return static_cast(Master.FindFirstElt(EBML_INFO(Type), false)); } template Type & GetNextChild(EbmlMaster & Master, const Type & PastElt) { - return *(static_cast(Master.FindNextElt(PastElt, true))); + return *(static_cast(Master.FindNextElt(PastElt, true))); } template Type & AddNewChild(EbmlMaster & Master) { - return *(static_cast(Master.AddNewElt(EBML_INFO(Type)))); + return *(static_cast(Master.AddNewElt(EBML_INFO(Type)))); } END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlSInteger.h b/ebml/EbmlSInteger.h index ec670e0..4ff0ec5 100644 --- a/ebml/EbmlSInteger.h +++ b/ebml/EbmlSInteger.h @@ -29,11 +29,11 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Julien Coloos - \author Moritz Bunkus + \file + \version \$Id$ + \author Steve Lhomme + \author Julien Coloos + \author Moritz Bunkus */ #ifndef LIBEBML_SINTEGER_H #define LIBEBML_SINTEGER_H @@ -52,48 +52,48 @@ const int DEFAULT_INT_SIZE = 1; ///< optimal size stored \brief Handle all operations on a signed integer EBML element */ class EBML_DLL_API EbmlSInteger : public EbmlElement { - public: - EbmlSInteger(); - EbmlSInteger(int64 DefaultValue); - EbmlSInteger(const EbmlSInteger & ElementToClone); + public: + EbmlSInteger(); + EbmlSInteger(int64 DefaultValue); + EbmlSInteger(const EbmlSInteger & ElementToClone); - EbmlSInteger & operator = (int64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;} + EbmlSInteger & operator = (int64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;} - /*! - Set the default size of the integer (usually 1,2,4 or 8) - */ + /*! + Set the default size of the integer (usually 1,2,4 or 8) + */ virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_INT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);} - virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() <= 8);} - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); + virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() <= 8);} + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - virtual bool IsSmallerThan(const EbmlElement *Cmp) const; + virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - operator int8() const; - operator int16() const; - operator int32() const; - operator int64() const; + operator int8() const; + operator int16() const; + operator int32() const; + operator int64() const; - EbmlSInteger &SetValue(int64 NewValue); - int64 GetValue() const; + EbmlSInteger &SetValue(int64 NewValue); + int64 GetValue() const; - void SetDefaultValue(int64 aValue) {assert(!DefaultISset()); DefaultValue = aValue; SetDefaultIsSet();} + void SetDefaultValue(int64 aValue) {assert(!DefaultISset()); DefaultValue = aValue; SetDefaultIsSet();} - int64 DefaultVal() const {assert(DefaultISset()); return DefaultValue;} + int64 DefaultVal() const {assert(DefaultISset()); return DefaultValue;} - bool IsDefaultValue() const { - return (DefaultISset() && Value == DefaultValue); - } + bool IsDefaultValue() const { + return (DefaultISset() && Value == DefaultValue); + } #if defined(EBML_STRICT_API) private: #else protected: #endif - int64 Value; /// The actual value of the element - int64 DefaultValue; + int64 Value; /// The actual value of the element + int64 DefaultValue; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlStream.h b/ebml/EbmlStream.h index 7143007..3ee76e8 100644 --- a/ebml/EbmlStream.h +++ b/ebml/EbmlStream.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_STREAM_H #define LIBEBML_STREAM_H @@ -47,20 +47,20 @@ START_LIBEBML_NAMESPACE \brief Handle an input/output stream of EBML elements */ class EBML_DLL_API EbmlStream { - public: - EbmlStream(IOCallback & output); - ~EbmlStream(); - - /*! - \brief Find a possible next ID in the data stream - \param MaxDataSize The maximum possible of the data in the element (for sanity checks) - \note the user will have to delete that element later - */ - EbmlElement * FindNextID(const EbmlCallbacks & ClassInfos, uint64 MaxDataSize); + public: + EbmlStream(IOCallback & output); + ~EbmlStream(); - EbmlElement * FindNextElement(const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1); + /*! + \brief Find a possible next ID in the data stream + \param MaxDataSize The maximum possible of the data in the element (for sanity checks) + \note the user will have to delete that element later + */ + EbmlElement * FindNextID(const EbmlCallbacks & ClassInfos, uint64 MaxDataSize); - inline IOCallback & I_O() {return Stream;} + EbmlElement * FindNextElement(const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel = 1); + + inline IOCallback & I_O() {return Stream;} operator IOCallback &() {return Stream;} #if defined(EBML_STRICT_API) @@ -68,7 +68,7 @@ class EBML_DLL_API EbmlStream { #else protected: #endif - IOCallback & Stream; + IOCallback & Stream; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlString.h b/ebml/EbmlString.h index 3deb162..6938576 100644 --- a/ebml/EbmlString.h +++ b/ebml/EbmlString.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_STRING_H #define LIBEBML_STRING_H @@ -48,39 +48,39 @@ START_LIBEBML_NAMESPACE \brief Handle all operations on a printable string EBML element */ class EBML_DLL_API EbmlString : public EbmlElement { - public: - EbmlString(); - EbmlString(const std::string & aDefaultValue); - EbmlString(const EbmlString & ElementToClone); - - virtual ~EbmlString() {} - - virtual bool ValidateSize() const {return IsFiniteSize();} // any size is possible - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - - EbmlString & operator=(const std::string &); - operator const std::string &() const; - + public: + EbmlString(); + EbmlString(const std::string & aDefaultValue); + EbmlString(const EbmlString & ElementToClone); + + virtual ~EbmlString() {} + + virtual bool ValidateSize() const {return IsFiniteSize();} // any size is possible + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); + + EbmlString & operator=(const std::string &); + operator const std::string &() const; + EbmlString &SetValue(std::string const &NewValue); std::string GetValue() const; - void SetDefaultValue(std::string &); - - const std::string & DefaultVal() const; + void SetDefaultValue(std::string &); - bool IsDefaultValue() const { - return (DefaultISset() && Value == DefaultValue); - } + const std::string & DefaultVal() const; + + bool IsDefaultValue() const { + return (DefaultISset() && Value == DefaultValue); + } #if defined(EBML_STRICT_API) private: #else protected: #endif - std::string Value; /// The actual value of the element - std::string DefaultValue; + std::string Value; /// The actual value of the element + std::string DefaultValue; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlSubHead.h b/ebml/EbmlSubHead.h index 2b158bf..20c7c34 100644 --- a/ebml/EbmlSubHead.h +++ b/ebml/EbmlSubHead.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlSubHead.h 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlSubHead.h 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme */ #ifndef LIBEBML_SUBHEAD_H #define LIBEBML_SUBHEAD_H @@ -44,50 +44,50 @@ START_LIBEBML_NAMESPACE DECLARE_EBML_UINTEGER(EVersion) - public: - EVersion(const EVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EVersion(const EVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EVersion) }; DECLARE_EBML_UINTEGER(EReadVersion) - public: - EReadVersion(const EReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EReadVersion(const EReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EReadVersion) }; DECLARE_EBML_UINTEGER(EMaxIdLength) - public: - EMaxIdLength(const EMaxIdLength & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EMaxIdLength(const EMaxIdLength & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EMaxIdLength) }; DECLARE_EBML_UINTEGER(EMaxSizeLength) - public: - EMaxSizeLength(const EMaxSizeLength & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EMaxSizeLength(const EMaxSizeLength & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EMaxSizeLength) }; DECLARE_EBML_STRING(EDocType) - public: - EDocType(const EDocType & ElementToClone) : EbmlString(ElementToClone) {} + public: + EDocType(const EDocType & ElementToClone) : EbmlString(ElementToClone) {} EBML_CONCRETE_CLASS(EDocType) }; DECLARE_EBML_UINTEGER(EDocTypeVersion) - public: - EDocTypeVersion(const EDocTypeVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EDocTypeVersion(const EDocTypeVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EDocTypeVersion) }; DECLARE_EBML_UINTEGER(EDocTypeReadVersion) - public: - EDocTypeReadVersion(const EDocTypeReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} + public: + EDocTypeReadVersion(const EDocTypeReadVersion & ElementToClone) : EbmlUInteger(ElementToClone) {} EBML_CONCRETE_CLASS(EDocTypeReadVersion) }; diff --git a/ebml/EbmlTypes.h b/ebml/EbmlTypes.h index 01fe0fd..257d8f4 100644 --- a/ebml/EbmlTypes.h +++ b/ebml/EbmlTypes.h @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,8 +27,8 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlTypes.h 639 2004-07-09 20:59:14Z mosu $ + \file + \version \$Id: EbmlTypes.h 639 2004-07-09 20:59:14Z mosu $ */ #ifndef LIBEBML_TYPES_H #define LIBEBML_TYPES_H @@ -62,9 +62,9 @@ typedef Endian big_80bits; enum ScopeMode { - SCOPE_PARTIAL_DATA = 0, - SCOPE_ALL_DATA, - SCOPE_NO_DATA + SCOPE_PARTIAL_DATA = 0, + SCOPE_ALL_DATA, + SCOPE_NO_DATA }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlUInteger.h b/ebml/EbmlUInteger.h index 1d01a4a..a2d89e0 100644 --- a/ebml/EbmlUInteger.h +++ b/ebml/EbmlUInteger.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,11 +29,11 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Julien Coloos - \author Moritz Bunkus + \file + \version \$Id$ + \author Steve Lhomme + \author Julien Coloos + \author Moritz Bunkus */ #ifndef LIBEBML_UINTEGER_H #define LIBEBML_UINTEGER_H @@ -50,48 +50,48 @@ const int DEFAULT_UINT_SIZE = 0; ///< optimal size stored \brief Handle all operations on an unsigned integer EBML element */ class EBML_DLL_API EbmlUInteger : public EbmlElement { - public: - EbmlUInteger(); - EbmlUInteger(uint64 DefaultValue); - EbmlUInteger(const EbmlUInteger & ElementToClone); - - EbmlUInteger & operator=(uint64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;} + public: + EbmlUInteger(); + EbmlUInteger(uint64 DefaultValue); + EbmlUInteger(const EbmlUInteger & ElementToClone); - /*! - Set the default size of the integer (usually 1,2,4 or 8) - */ - virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_UINT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);} + EbmlUInteger & operator=(uint64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;} - virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() <= 8);} - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - - virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - - operator uint8() const; - operator uint16() const; - operator uint32() const; - operator uint64() const; + /*! + Set the default size of the integer (usually 1,2,4 or 8) + */ + virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_UINT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);} - EbmlUInteger &SetValue(uint64 NewValue); - uint64 GetValue() const; + virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() <= 8);} + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - void SetDefaultValue(uint64); - - uint64 DefaultVal() const; + virtual bool IsSmallerThan(const EbmlElement *Cmp) const; - bool IsDefaultValue() const { - return (DefaultISset() && Value == DefaultValue); - } + operator uint8() const; + operator uint16() const; + operator uint32() const; + operator uint64() const; + + EbmlUInteger &SetValue(uint64 NewValue); + uint64 GetValue() const; + + void SetDefaultValue(uint64); + + uint64 DefaultVal() const; + + bool IsDefaultValue() const { + return (DefaultISset() && Value == DefaultValue); + } #if defined(EBML_STRICT_API) private: #else protected: #endif - uint64 Value; /// The actual value of the element - uint64 DefaultValue; + uint64 Value; /// The actual value of the element + uint64 DefaultValue; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlUnicodeString.h b/ebml/EbmlUnicodeString.h index 6b978c6..534e8e7 100644 --- a/ebml/EbmlUnicodeString.h +++ b/ebml/EbmlUnicodeString.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,11 +29,11 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Moritz Bunkus - \author Jory Stone + \file + \version \$Id$ + \author Steve Lhomme + \author Moritz Bunkus + \author Jory Stone */ #ifndef LIBEBML_UNICODE_STRING_H #define LIBEBML_UNICODE_STRING_H @@ -52,87 +52,87 @@ START_LIBEBML_NAMESPACE */ class EBML_DLL_API UTFstring { public: - typedef wchar_t value_type; + typedef wchar_t value_type; - UTFstring(); - UTFstring(const wchar_t *); // should be NULL terminated - UTFstring(const UTFstring &); - UTFstring(std::wstring const &); - - virtual ~UTFstring(); - bool operator==(const UTFstring&) const; - inline bool operator!=(const UTFstring &cmp) const - { - return !(*this == cmp); - } - UTFstring & operator=(const UTFstring &); - UTFstring & operator=(const wchar_t *); - UTFstring & operator=(wchar_t); + UTFstring(); + UTFstring(const wchar_t *); // should be NULL terminated + UTFstring(const UTFstring &); + UTFstring(std::wstring const &); - /// Return length of string - size_t length() const {return _Length;} + virtual ~UTFstring(); + bool operator==(const UTFstring&) const; + inline bool operator!=(const UTFstring &cmp) const + { + return !(*this == cmp); + } + UTFstring & operator=(const UTFstring &); + UTFstring & operator=(const wchar_t *); + UTFstring & operator=(wchar_t); - operator const wchar_t*() const; - const wchar_t* c_str() const {return _Data;} + /// Return length of string + size_t length() const {return _Length;} - const std::string & GetUTF8() const {return UTF8string;} - void SetUTF8(const std::string &); + operator const wchar_t*() const; + const wchar_t* c_str() const {return _Data;} + + const std::string & GetUTF8() const {return UTF8string;} + void SetUTF8(const std::string &); #if defined(EBML_STRICT_API) private: #else protected: #endif - size_t _Length; ///< length of the UCS string excluding the \0 - wchar_t* _Data; ///< internal UCS representation - std::string UTF8string; - static bool wcscmp_internal(const wchar_t *str1, const wchar_t *str2); - void UpdateFromUTF8(); - void UpdateFromUCS2(); + size_t _Length; ///< length of the UCS string excluding the \0 + wchar_t* _Data; ///< internal UCS representation + std::string UTF8string; + static bool wcscmp_internal(const wchar_t *str1, const wchar_t *str2); + void UpdateFromUTF8(); + void UpdateFromUCS2(); }; /*! \class EbmlUnicodeString \brief Handle all operations on a Unicode string EBML element - \note internally treated as a string made of wide characters (ie UCS-2 or UCS-4 depending on the machine) + \note internally treated as a string made of wide characters (ie UCS-2 or UCS-4 depending on the machine) */ class EBML_DLL_API EbmlUnicodeString : public EbmlElement { - public: - EbmlUnicodeString(); - EbmlUnicodeString(const UTFstring & DefaultValue); - EbmlUnicodeString(const EbmlUnicodeString & ElementToClone); - - virtual ~EbmlUnicodeString() {} - - virtual bool ValidateSize() const {return IsFiniteSize();} // any size is possible - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); - filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); - - EbmlUnicodeString & operator=(const UTFstring &); ///< platform dependant code - operator const UTFstring &() const; - + public: + EbmlUnicodeString(); + EbmlUnicodeString(const UTFstring & DefaultValue); + EbmlUnicodeString(const EbmlUnicodeString & ElementToClone); + + virtual ~EbmlUnicodeString() {} + + virtual bool ValidateSize() const {return IsFiniteSize();} // any size is possible + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA); + filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false); + + EbmlUnicodeString & operator=(const UTFstring &); ///< platform dependant code + operator const UTFstring &() const; + EbmlUnicodeString &SetValue(UTFstring const &NewValue); EbmlUnicodeString &SetValueUTF8(std::string const &NewValue); UTFstring GetValue() const; std::string GetValueUTF8() const; - void SetDefaultValue(UTFstring &); - - const UTFstring & DefaultVal() const; + void SetDefaultValue(UTFstring &); - bool IsDefaultValue() const { - return (DefaultISset() && Value == DefaultValue); - } + const UTFstring & DefaultVal() const; + + bool IsDefaultValue() const { + return (DefaultISset() && Value == DefaultValue); + } #if defined(EBML_STRICT_API) private: #else protected: #endif - UTFstring Value; /// The actual value of the element - UTFstring DefaultValue; + UTFstring Value; /// The actual value of the element + UTFstring DefaultValue; }; END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlVersion.h b/ebml/EbmlVersion.h index 0f47238..5d77ad6 100644 --- a/ebml/EbmlVersion.h +++ b/ebml/EbmlVersion.h @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #ifndef LIBEBML_VERSION_H #define LIBEBML_VERSION_H @@ -48,7 +48,7 @@ extern const std::string EbmlCodeVersion; extern const std::string EbmlCodeDate; /*! - \todo Closer relation between an element and the context it comes from (context is an element attribute ?) + \todo Closer relation between an element and the context it comes from (context is an element attribute ?) */ END_LIBEBML_NAMESPACE diff --git a/ebml/EbmlVoid.h b/ebml/EbmlVoid.h index 1370284..4dca90e 100644 --- a/ebml/EbmlVoid.h +++ b/ebml/EbmlVoid.h @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlVoid.h 1079 2005-03-03 13:18:14Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlVoid.h 1079 2005-03-03 13:18:14Z robux4 $ + \author Steve Lhomme */ #ifndef LIBEBML_VOID_H #define LIBEBML_VOID_H @@ -42,28 +42,28 @@ START_LIBEBML_NAMESPACE DECLARE_EBML_BINARY(EbmlVoid) - public: - EbmlVoid(const EbmlVoid & ElementToClone) :EbmlBinary(ElementToClone){} + public: + EbmlVoid(const EbmlVoid & ElementToClone) :EbmlBinary(ElementToClone){} - /*! - \brief Set the size of the data (not the complete size of the element) - */ - void SetSize(uint64 aSize) {SetSize_(aSize);} + /*! + \brief Set the size of the data (not the complete size of the element) + */ + void SetSize(uint64 aSize) {SetSize_(aSize);} - /*! - \note overwrite to write fake data - */ - filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); + /*! + \note overwrite to write fake data + */ + filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false); - /*! - \brief Replace the void element content (written) with this one - */ - uint64 ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false); + /*! + \brief Replace the void element content (written) with this one + */ + uint64 ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false); - /*! - \brief Void the content of an element - */ - uint64 Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false); + /*! + \brief Void the content of an element + */ + uint64 Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward = true, bool bWithDefault = false); EBML_CONCRETE_CLASS(EbmlVoid) }; diff --git a/ebml/IOCallback.h b/ebml/IOCallback.h index 5a5ecd8..3ac31ba 100644 --- a/ebml/IOCallback.h +++ b/ebml/IOCallback.h @@ -27,8 +27,8 @@ **********************************************************************/ /*! - \file - \version \$Id: IOCallback.h 639 2004-07-09 20:59:14Z mosu $ + \file + \version \$Id: IOCallback.h 639 2004-07-09 20:59:14Z mosu $ */ #ifndef MATROSKA_IOCALLBACK_H #define MATROSKA_IOCALLBACK_H @@ -45,70 +45,70 @@ START_LIBEBML_NAMESPACE enum seek_mode { - seek_beginning=SEEK_SET - ,seek_end=SEEK_END - ,seek_current=SEEK_CUR + seek_beginning=SEEK_SET + ,seek_end=SEEK_END + ,seek_current=SEEK_CUR }; class EBML_DLL_API IOCallback { public: - virtual ~IOCallback(){} + virtual ~IOCallback(){} - // The read callback works like most other read functions. You specify the - // file, the buffer and the size and the function returns the bytes read. - // If an error occurs or the file pointer points to the end of the file 0 is returned. - // Users are encouraged to throw a descriptive exception, when an error occurs. - virtual uint32 read(void*Buffer,size_t Size)=0; + // The read callback works like most other read functions. You specify the + // file, the buffer and the size and the function returns the bytes read. + // If an error occurs or the file pointer points to the end of the file 0 is returned. + // Users are encouraged to throw a descriptive exception, when an error occurs. + virtual uint32 read(void*Buffer,size_t Size)=0; - // Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR - // or SEEK_END. The callback should return true(1) if the seek operation succeeded - // or false (0), when the seek fails. - virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning)=0; + // Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR + // or SEEK_END. The callback should return true(1) if the seek operation succeeded + // or false (0), when the seek fails. + virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning)=0; - // This callback just works like its read pendant. It returns the number of bytes written. - virtual size_t write(const void*Buffer,size_t Size)=0; + // This callback just works like its read pendant. It returns the number of bytes written. + virtual size_t write(const void*Buffer,size_t Size)=0; - // Although the position is always positive, the return value of this callback is signed to - // easily allow negative values for returning errors. When an error occurs, the implementor - // should return -1 and the file pointer otherwise. - // - // If an error occurs, an exception should be thrown. - virtual uint64 getFilePointer()=0; + // Although the position is always positive, the return value of this callback is signed to + // easily allow negative values for returning errors. When an error occurs, the implementor + // should return -1 and the file pointer otherwise. + // + // If an error occurs, an exception should be thrown. + virtual uint64 getFilePointer()=0; - // The close callback flushes the file buffers to disk and closes the file. When using the stdio - // library, this is equivalent to calling fclose. When the close is not successful, an exception - // should be thrown. - virtual void close()=0; + // The close callback flushes the file buffers to disk and closes the file. When using the stdio + // library, this is equivalent to calling fclose. When the close is not successful, an exception + // should be thrown. + virtual void close()=0; - // The readFully is made virtual to allow derived classes to use another - // implementation for this method, which e.g. does not read any data - // unlike this does - void readFully(void*Buffer,size_t Size); + // The readFully is made virtual to allow derived classes to use another + // implementation for this method, which e.g. does not read any data + // unlike this does + void readFully(void*Buffer,size_t Size); - template void readStruct(STRUCT&Struct){readFully(&Struct,sizeof(Struct));} + template void readStruct(STRUCT&Struct){readFully(&Struct,sizeof(Struct));} - void writeFully(const void*Buffer,size_t Size); + void writeFully(const void*Buffer,size_t Size); - template void writeStruct(const STRUCT&Struct){writeFully(&Struct,sizeof(Struct));} + template void writeStruct(const STRUCT&Struct){writeFully(&Struct,sizeof(Struct));} }; /* cygwin incompatible template std::basic_ostream&operator<<(std::basic_ostream&Stream,seek_mode Mode) { - switch(Mode) - { + switch(Mode) + { #define x(y) case seek_##y: Stream<<"seek_" #y; break - x(beginning); - x(current); - x(end); + x(beginning); + x(current); + x(end); #undef x - default: - assert(false); - } + default: + assert(false); + } - return Stream; + return Stream; } */ diff --git a/ebml/MemIOCallback.h b/ebml/MemIOCallback.h index 48fed9b..35df9c9 100644 --- a/ebml/MemIOCallback.h +++ b/ebml/MemIOCallback.h @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,9 +27,9 @@ **********************************************************************/ /*! - \file - \version \$Id: MemIOCallback.h 1298 2008-02-21 22:14:18Z mosu $ - \author Jory Stone + \file + \version \$Id: MemIOCallback.h 1298 2008-02-21 22:14:18Z mosu $ + \author Jory Stone */ #ifndef LIBEBML_MEMIOCALLBACK_H #define LIBEBML_MEMIOCALLBACK_H @@ -48,69 +48,69 @@ START_LIBEBML_NAMESPACE class EBML_DLL_API MemIOCallback : public IOCallback { public: - MemIOCallback(uint64 DefaultSize = 128); - ~MemIOCallback(); + MemIOCallback(uint64 DefaultSize = 128); + ~MemIOCallback(); - /*! - Use this to copy some data to the Buffer from this classes data - */ - uint32 read(void *Buffer, size_t Size); + /*! + Use this to copy some data to the Buffer from this classes data + */ + uint32 read(void *Buffer, size_t Size); - /*! - Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR - or SEEK_END. The callback should return true(1) if the seek operation succeeded - or false (0), when the seek fails. - */ - void setFilePointer(int64 Offset, seek_mode Mode=seek_beginning); + /*! + Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR + or SEEK_END. The callback should return true(1) if the seek operation succeeded + or false (0), when the seek fails. + */ + void setFilePointer(int64 Offset, seek_mode Mode=seek_beginning); - /*! - This callback just works like its read pendant. It returns the number of bytes written. - */ - size_t write(const void *Buffer, size_t Size); + /*! + This callback just works like its read pendant. It returns the number of bytes written. + */ + size_t write(const void *Buffer, size_t Size); - /*! - Although the position is always positive, the return value of this callback is signed to - easily allow negative values for returning errors. When an error occurs, the implementor - should return -1 and the file pointer otherwise. + /*! + Although the position is always positive, the return value of this callback is signed to + easily allow negative values for returning errors. When an error occurs, the implementor + should return -1 and the file pointer otherwise. - If an error occurs, an exception should be thrown. - */ - virtual uint64 getFilePointer() {return dataBufferPos;}; + If an error occurs, an exception should be thrown. + */ + virtual uint64 getFilePointer() {return dataBufferPos;}; - /*! - The close callback flushes the file buffers to disk and closes the file. When using the stdio - library, this is equivalent to calling fclose. When the close is not successful, an exception - should be thrown. - */ - void close() {}; + /*! + The close callback flushes the file buffers to disk and closes the file. When using the stdio + library, this is equivalent to calling fclose. When the close is not successful, an exception + should be thrown. + */ + void close() {}; - binary *GetDataBuffer() const {return dataBuffer;}; - uint64 GetDataBufferSize() {return dataBufferTotalSize;}; - void SetDataBufferSize(uint64 newDataBufferSize) {dataBufferTotalSize = newDataBufferSize;}; - /*! - Use this to write some data from another IOCallback - */ - uint32 write(IOCallback & IOToRead, size_t Size); + binary *GetDataBuffer() const {return dataBuffer;}; + uint64 GetDataBufferSize() {return dataBufferTotalSize;}; + void SetDataBufferSize(uint64 newDataBufferSize) {dataBufferTotalSize = newDataBufferSize;}; + /*! + Use this to write some data from another IOCallback + */ + uint32 write(IOCallback & IOToRead, size_t Size); - bool IsOk() { return mOk; }; - const std::string &GetLastErrorStr() { return mLastErrorStr; }; + bool IsOk() { return mOk; }; + const std::string &GetLastErrorStr() { return mLastErrorStr; }; protected: - bool mOk; - std::string mLastErrorStr; + bool mOk; + std::string mLastErrorStr; - binary *dataBuffer; - /*! - Postion where we start 'writing' to the dataBuffer - */ - uint64 dataBufferPos; - /*! - Size of the data in the dataBuffer - */ - uint64 dataBufferTotalSize; - /*! - Size of the memory malloc()/realloc() - */ - uint64 dataBufferMemorySize; + binary *dataBuffer; + /*! + Postion where we start 'writing' to the dataBuffer + */ + uint64 dataBufferPos; + /*! + Size of the data in the dataBuffer + */ + uint64 dataBufferTotalSize; + /*! + Size of the memory malloc()/realloc() + */ + uint64 dataBufferMemorySize; }; END_LIBEBML_NAMESPACE diff --git a/ebml/StdIOCallback.h b/ebml/StdIOCallback.h index 90089e5..7786e79 100644 --- a/ebml/StdIOCallback.h +++ b/ebml/StdIOCallback.h @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,8 +27,8 @@ **********************************************************************/ /*! - \file - \version \$Id: StdIOCallback.h 1090 2005-03-16 12:47:59Z robux4 $ + \file + \version \$Id: StdIOCallback.h 1090 2005-03-16 12:47:59Z robux4 $ */ #ifndef LIBEBML_STDIOCALLBACK_H #define LIBEBML_STDIOCALLBACK_H @@ -51,49 +51,49 @@ class EBML_DLL_API CRTError:public std::runtime_error { // Variablen... private: - int Error; + int Error; // Methoden... public: - CRTError(int Error,const std::string&Description); - CRTError(const std::string&Description,int Error=errno); + CRTError(int Error,const std::string&Description); + CRTError(const std::string&Description,int Error=errno); - int getError()const throw(){return Error;} + int getError()const throw(){return Error;} }; // This class is currently private to the library, so there's no MATROSKA_EXPORT. class EBML_DLL_API StdIOCallback:public IOCallback { private: - FILE*File; - uint64 mCurrentPosition; + FILE*File; + uint64 mCurrentPosition; public: -// StdIOCallback(const char*Path,const char*Mode); - StdIOCallback(const char*Path, const open_mode Mode); - virtual ~StdIOCallback()throw(); +// StdIOCallback(const char*Path,const char*Mode); + StdIOCallback(const char*Path, const open_mode Mode); + virtual ~StdIOCallback()throw(); - virtual uint32 read(void*Buffer,size_t Size); + virtual uint32 read(void*Buffer,size_t Size); - // Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR - // or SEEK_END. The callback should return true(1) if the seek operation succeeded - // or false (0), when the seek fails. - virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning); + // Seek to the specified position. The mode can have either SEEK_SET, SEEK_CUR + // or SEEK_END. The callback should return true(1) if the seek operation succeeded + // or false (0), when the seek fails. + virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning); - // This callback just works like its read pendant. It returns the number of bytes written. - virtual size_t write(const void*Buffer,size_t Size); + // This callback just works like its read pendant. It returns the number of bytes written. + virtual size_t write(const void*Buffer,size_t Size); - // Although the position is always positive, the return value of this callback is signed to - // easily allow negative values for returning errors. When an error occurs, the implementor - // should return -1 and the file pointer otherwise. - // - // If an error occurs, an exception should be thrown. - virtual uint64 getFilePointer(); + // Although the position is always positive, the return value of this callback is signed to + // easily allow negative values for returning errors. When an error occurs, the implementor + // should return -1 and the file pointer otherwise. + // + // If an error occurs, an exception should be thrown. + virtual uint64 getFilePointer(); - // The close callback flushes the file buffers to disk and closes the file. When using the stdio - // library, this is equivalent to calling fclose. When the close is not successful, an exception - // should be thrown. - virtual void close(); + // The close callback flushes the file buffers to disk and closes the file. When using the stdio + // library, this is equivalent to calling fclose. When the close is not successful, an exception + // should be thrown. + virtual void close(); }; END_LIBEBML_NAMESPACE diff --git a/ebml/c/libebml_t.h b/ebml/c/libebml_t.h index fa25f0a..71fe115 100644 --- a/ebml/c/libebml_t.h +++ b/ebml/c/libebml_t.h @@ -50,7 +50,7 @@ extern "C" { // Changed char is unsigned now (signedness was causing trouble in endil) #if defined(_WIN32) -# if !defined(__GNUC__) // Microsoft Visual C++ +# if !defined(__GNUC__) // Microsoft Visual C++ typedef signed __int64 int64; typedef signed __int32 int32; typedef signed __int16 int16; @@ -74,7 +74,7 @@ extern "C" { # endif // __GNUC__ #elif defined(__BEOS__) #include -#elif defined(DJGPP) /* SL : DJGPP doesn't support POSIX types ???? */ +#elif defined(DJGPP) /* SL : DJGPP doesn't support POSIX types ???? */ typedef signed long long int64; typedef signed long int32; typedef signed short int16; diff --git a/libebml.proj b/libebml.proj index 6dda9ad..429129d 100644 --- a/libebml.proj +++ b/libebml.proj @@ -13,7 +13,7 @@ LIB ebml FAVOR_MAX_SPEED . REDUCE_SIZE . FASTER_FLOAT . - + SOURCE src/Debug.cpp SOURCE src/EbmlBinary.cpp SOURCE src/EbmlContexts.cpp diff --git a/src/Debug.cpp b/src/Debug.cpp index 47da74d..6dc6864 100644 --- a/src/Debug.cpp +++ b/src/Debug.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id: Debug.cpp 1268 2007-01-19 10:15:08Z robux4 $ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id: Debug.cpp 1268 2007-01-19 10:15:08Z robux4 $ + \author Steve Lhomme + \author Moritz Bunkus */ #include @@ -62,174 +62,174 @@ ADbg::ADbg(int level) ,my_debug_output(true) ,hFile(NULL) { - prefix[0] = '\0'; - OutPut(-1,"ADbg Creation at debug level = %d (0x%08X)",my_level,this); + prefix[0] = '\0'; + OutPut(-1,"ADbg Creation at debug level = %d (0x%08X)",my_level,this); } ADbg::~ADbg() { - unsetDebugFile(); - OutPut(-1,"ADbg Deletion (0x%08X)",this); + unsetDebugFile(); + OutPut(-1,"ADbg Deletion (0x%08X)",this); } inline int ADbg::_OutPut(const char * format,va_list params) const { - int result; + int result; - char tst[1000]; - char myformat[256]; + char tst[1000]; + char myformat[256]; #ifdef WIN32 - if (my_time_included) { - SYSTEMTIME time; - GetSystemTime(&time); - if (prefix[0] == '\0') - wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s\r\n", - time.wYear, - time.wMonth, - time.wDay, - time.wHour, - time.wMinute, - time.wSecond, - time.wMilliseconds, - format); - else - wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s - %s\r\n", - time.wYear, - time.wMonth, - time.wDay, - time.wHour, - time.wMinute, - time.wSecond, - time.wMilliseconds, - prefix, - format); - } else { - if (prefix[0] == '\0') - wsprintfA( myformat, "%s\r\n", format); - else - wsprintfA( myformat, "%s - %s\r\n", prefix, format); - } - result = vsprintf(tst,myformat,params); - - if (my_debug_output) - OutputDebugStringA(tst); + if (my_time_included) { + SYSTEMTIME time; + GetSystemTime(&time); + if (prefix[0] == '\0') + wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s\r\n", + time.wYear, + time.wMonth, + time.wDay, + time.wHour, + time.wMinute, + time.wSecond, + time.wMilliseconds, + format); + else + wsprintfA(myformat,"%04d/%02d/%02d %02d:%02d:%02d.%03d UTC : %s - %s\r\n", + time.wYear, + time.wMonth, + time.wDay, + time.wHour, + time.wMinute, + time.wSecond, + time.wMilliseconds, + prefix, + format); + } else { + if (prefix[0] == '\0') + wsprintfA( myformat, "%s\r\n", format); + else + wsprintfA( myformat, "%s - %s\r\n", prefix, format); + } + result = vsprintf(tst,myformat,params); - if (my_use_file && (hFile != NULL)) { - SetFilePointer( hFile, 0, 0, FILE_END ); - DWORD written; - WriteFile( hFile, tst, lstrlenA(tst), &written, NULL ); - } + if (my_debug_output) + OutputDebugStringA(tst); + + if (my_use_file && (hFile != NULL)) { + SetFilePointer( hFile, 0, 0, FILE_END ); + DWORD written; + WriteFile( hFile, tst, lstrlenA(tst), &written, NULL ); + } #else - if (my_time_included) { - time_t nowSecs; - struct tm *now; - struct timeval tv; - - nowSecs = time(NULL); - gettimeofday(&tv, NULL); - now = gmtime(&nowSecs); - if (prefix[0] == '\0') - sprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02ld.%03ld UTC : %s\r\n", - now->tm_year, now->tm_mon, now->tm_mday, - now->tm_hour, now->tm_min, tv.tv_sec, - (long)tv.tv_usec / 1000, format); - else - sprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02ld.%03ld UTC : %s - %s\r\n", - now->tm_year, now->tm_mon, now->tm_mday, - now->tm_hour, now->tm_min, tv.tv_sec, - (long)tv.tv_usec / 1000, prefix, format); - - } else { - if (prefix[0] == '\0') - sprintf( myformat, "%s\r\n", format); - else - sprintf( myformat, "%s - %s\r\n", prefix, format); - } + if (my_time_included) { + time_t nowSecs; + struct tm *now; + struct timeval tv; - result = vsprintf(tst,myformat,params); - - if (my_debug_output) - fputs(tst, stderr); + nowSecs = time(NULL); + gettimeofday(&tv, NULL); + now = gmtime(&nowSecs); + if (prefix[0] == '\0') + sprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02ld.%03ld UTC : %s\r\n", + now->tm_year, now->tm_mon, now->tm_mday, + now->tm_hour, now->tm_min, tv.tv_sec, + (long)tv.tv_usec / 1000, format); + else + sprintf(myformat,"%04d/%02d/%02d %02d:%02d:%02ld.%03ld UTC : %s - %s\r\n", + now->tm_year, now->tm_mon, now->tm_mday, + now->tm_hour, now->tm_min, tv.tv_sec, + (long)tv.tv_usec / 1000, prefix, format); - if (my_use_file && (hFile != NULL)) - fputs(tst, hFile); + } else { + if (prefix[0] == '\0') + sprintf( myformat, "%s\r\n", format); + else + sprintf( myformat, "%s - %s\r\n", prefix, format); + } + + result = vsprintf(tst,myformat,params); + + if (my_debug_output) + fputs(tst, stderr); + + if (my_use_file && (hFile != NULL)) + fputs(tst, hFile); #endif - return result; + return result; } int ADbg::OutPut(int forLevel, const char * format,...) const { - int result=0; - - if (forLevel >= my_level) { - va_list tstlist; + int result=0; - va_start(tstlist, format); + if (forLevel >= my_level) { + va_list tstlist; - result = _OutPut(format,tstlist); + va_start(tstlist, format); - } + result = _OutPut(format,tstlist); - return result; + } + + return result; } int ADbg::OutPut(const char * format,...) const { - va_list tstlist; + va_list tstlist; - va_start(tstlist, format); + va_start(tstlist, format); - return _OutPut(format,tstlist); + return _OutPut(format,tstlist); } bool ADbg::setDebugFile(const char * NewFilename) { - bool result; - result = unsetDebugFile(); + bool result; + result = unsetDebugFile(); - if (result) { - result = false; + if (result) { + result = false; #ifdef WIN32 - hFile = CreateFileA(NewFilename, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - - if (hFile != INVALID_HANDLE_VALUE) { - SetFilePointer( hFile, 0, 0, FILE_END ); + hFile = CreateFileA(NewFilename, GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - result = true; + if (hFile != INVALID_HANDLE_VALUE) { + SetFilePointer( hFile, 0, 0, FILE_END ); + + result = true; #else - hFile = fopen(NewFilename, "w+"); - if (hFile != NULL) { - fseek(hFile, 0, SEEK_END); + hFile = fopen(NewFilename, "w+"); + if (hFile != NULL) { + fseek(hFile, 0, SEEK_END); #endif - OutPut(-1,"Debug hFile Opening succeeded"); + OutPut(-1,"Debug hFile Opening succeeded"); - } - else - OutPut(-1,"Debug hFile %s Opening failed",NewFilename); - } + } + else + OutPut(-1,"Debug hFile %s Opening failed",NewFilename); + } - return result; + return result; } bool ADbg::unsetDebugFile() { - bool result = (hFile == NULL); - + bool result = (hFile == NULL); + #ifdef WIN32 - if (hFile != NULL) { - result = (CloseHandle(hFile) != 0); + if (hFile != NULL) { + result = (CloseHandle(hFile) != 0); #else - if (hFile != NULL) { - result = (fclose(hFile) == 0); + if (hFile != NULL) { + result = (fclose(hFile) == 0); #endif - if (result) { - OutPut(-1,"Debug hFile Closing succeeded"); - hFile = NULL; - } - } - return result; + if (result) { + OutPut(-1,"Debug hFile Closing succeeded"); + hFile = NULL; + } + } + return result; } #endif // defined(LIBEBML_DEBUG) diff --git a/src/EbmlBinary.cpp b/src/EbmlBinary.cpp index 139d92c..1e42ee4 100644 --- a/src/EbmlBinary.cpp +++ b/src/EbmlBinary.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Julien Coloos + \file + \version \$Id$ + \author Steve Lhomme + \author Julien Coloos */ #include #include @@ -49,18 +49,18 @@ EbmlBinary::EbmlBinary() EbmlBinary::EbmlBinary(const EbmlBinary & ElementToClone) :EbmlElement(ElementToClone) { - if (ElementToClone.Data == NULL) - Data = NULL; - else { - Data = (binary *)malloc(GetSize() * sizeof(binary)); - assert(Data != NULL); - memcpy(Data, ElementToClone.Data, GetSize()); - } + if (ElementToClone.Data == NULL) + Data = NULL; + else { + Data = (binary *)malloc(GetSize() * sizeof(binary)); + assert(Data != NULL); + memcpy(Data, ElementToClone.Data, GetSize()); + } } EbmlBinary::~EbmlBinary(void) { - if(Data) - free(Data); + if(Data) + free(Data); } EbmlBinary::operator const binary &() const {return *Data;} @@ -68,40 +68,40 @@ EbmlBinary::operator const binary &() const {return *Data;} filepos_t EbmlBinary::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - output.writeFully(Data,GetSize()); + output.writeFully(Data,GetSize()); - return GetSize(); + return GetSize(); } - + /*! - \note no Default binary value handled + \note no Default binary value handled */ uint64 EbmlBinary::UpdateSize(bool /* bWithDefault */, bool /* bForceRender */) { - return GetSize(); + return GetSize(); } filepos_t EbmlBinary::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (Data != NULL) - free(Data); - - if (ReadFully == SCOPE_NO_DATA || !GetSize()) - { - Data = NULL; - return GetSize(); - } + if (Data != NULL) + free(Data); - Data = (binary *)malloc(GetSize()); + if (ReadFully == SCOPE_NO_DATA || !GetSize()) + { + Data = NULL; + return GetSize(); + } + + Data = (binary *)malloc(GetSize()); if (Data == NULL) - throw CRTError(std::string("Error allocating data")); - SetValueIsSet(); - return input.read(Data, GetSize()); + throw CRTError(std::string("Error allocating data")); + SetValueIsSet(); + return input.read(Data, GetSize()); } bool EbmlBinary::operator==(const EbmlBinary & ElementToCompare) const { - return ((GetSize() == ElementToCompare.GetSize()) && !memcmp(Data, ElementToCompare.Data, GetSize())); + return ((GetSize() == ElementToCompare.GetSize()) && !memcmp(Data, ElementToCompare.Data, GetSize())); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlContexts.cpp b/src/EbmlContexts.cpp index 1c28f3e..0281aef 100644 --- a/src/EbmlContexts.cpp +++ b/src/EbmlContexts.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlContexts.cpp 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlContexts.cpp 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme */ #include "ebml/EbmlContexts.h" #include "ebml/EbmlCrc32.h" @@ -41,8 +41,8 @@ START_LIBEBML_NAMESPACE static const EbmlSemantic EbmlGlobal_ContextList[2] = { - EbmlSemantic(false, false, EBML_INFO(EbmlCrc32)), ///< EbmlCrc32 - EbmlSemantic(false, false, EBML_INFO(EbmlVoid)), ///< EbmlVoid + EbmlSemantic(false, false, EBML_INFO(EbmlCrc32)), ///< EbmlCrc32 + EbmlSemantic(false, false, EBML_INFO(EbmlVoid)), ///< EbmlVoid }; const EbmlSemanticContext Context_EbmlGlobal = EbmlSemanticContext(0, NULL, NULL, *GetEbmlGlobal_Context, NULL); @@ -51,7 +51,7 @@ static const EbmlSemanticContext EbmlGlobal_Context = EbmlSemanticContext(counto const EbmlSemanticContext & GetEbmlGlobal_Context() { - return EbmlGlobal_Context; + return EbmlGlobal_Context; } END_LIBEBML_NAMESPACE diff --git a/src/EbmlCrc32.cpp b/src/EbmlCrc32.cpp index 77b5982..6f60a97 100644 --- a/src/EbmlCrc32.cpp +++ b/src/EbmlCrc32.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlCrc32.cpp 1155 2005-05-06 11:43:38Z robux4 $ - \author Steve Lhomme - \author Jory Stone + \file + \version \$Id: EbmlCrc32.cpp 1155 2005-05-06 11:43:38Z robux4 $ + \author Steve Lhomme + \author Jory Stone */ #include "ebml/EbmlCrc32.h" #include "ebml/EbmlContexts.h" @@ -54,129 +54,129 @@ DEFINE_EBML_CLASS_GLOBAL(EbmlCrc32, 0xBF, 1, "EBMLCrc32\0ratamadabapa"); const uint32 EbmlCrc32::m_tab[] = { #ifdef WORDS_BIGENDIAN - 0x00000000L, 0x96300777L, 0x2c610eeeL, 0xba510999L, 0x19c46d07L, - 0x8ff46a70L, 0x35a563e9L, 0xa395649eL, 0x3288db0eL, 0xa4b8dc79L, - 0x1ee9d5e0L, 0x88d9d297L, 0x2b4cb609L, 0xbd7cb17eL, 0x072db8e7L, - 0x911dbf90L, 0x6410b71dL, 0xf220b06aL, 0x4871b9f3L, 0xde41be84L, - 0x7dd4da1aL, 0xebe4dd6dL, 0x51b5d4f4L, 0xc785d383L, 0x56986c13L, - 0xc0a86b64L, 0x7af962fdL, 0xecc9658aL, 0x4f5c0114L, 0xd96c0663L, - 0x633d0ffaL, 0xf50d088dL, 0xc8206e3bL, 0x5e10694cL, 0xe44160d5L, - 0x727167a2L, 0xd1e4033cL, 0x47d4044bL, 0xfd850dd2L, 0x6bb50aa5L, - 0xfaa8b535L, 0x6c98b242L, 0xd6c9bbdbL, 0x40f9bcacL, 0xe36cd832L, - 0x755cdf45L, 0xcf0dd6dcL, 0x593dd1abL, 0xac30d926L, 0x3a00de51L, - 0x8051d7c8L, 0x1661d0bfL, 0xb5f4b421L, 0x23c4b356L, 0x9995bacfL, - 0x0fa5bdb8L, 0x9eb80228L, 0x0888055fL, 0xb2d90cc6L, 0x24e90bb1L, - 0x877c6f2fL, 0x114c6858L, 0xab1d61c1L, 0x3d2d66b6L, 0x9041dc76L, - 0x0671db01L, 0xbc20d298L, 0x2a10d5efL, 0x8985b171L, 0x1fb5b606L, - 0xa5e4bf9fL, 0x33d4b8e8L, 0xa2c90778L, 0x34f9000fL, 0x8ea80996L, - 0x18980ee1L, 0xbb0d6a7fL, 0x2d3d6d08L, 0x976c6491L, 0x015c63e6L, - 0xf4516b6bL, 0x62616c1cL, 0xd8306585L, 0x4e0062f2L, 0xed95066cL, - 0x7ba5011bL, 0xc1f40882L, 0x57c40ff5L, 0xc6d9b065L, 0x50e9b712L, - 0xeab8be8bL, 0x7c88b9fcL, 0xdf1ddd62L, 0x492dda15L, 0xf37cd38cL, - 0x654cd4fbL, 0x5861b24dL, 0xce51b53aL, 0x7400bca3L, 0xe230bbd4L, - 0x41a5df4aL, 0xd795d83dL, 0x6dc4d1a4L, 0xfbf4d6d3L, 0x6ae96943L, - 0xfcd96e34L, 0x468867adL, 0xd0b860daL, 0x732d0444L, 0xe51d0333L, - 0x5f4c0aaaL, 0xc97c0dddL, 0x3c710550L, 0xaa410227L, 0x10100bbeL, - 0x86200cc9L, 0x25b56857L, 0xb3856f20L, 0x09d466b9L, 0x9fe461ceL, - 0x0ef9de5eL, 0x98c9d929L, 0x2298d0b0L, 0xb4a8d7c7L, 0x173db359L, - 0x810db42eL, 0x3b5cbdb7L, 0xad6cbac0L, 0x2083b8edL, 0xb6b3bf9aL, - 0x0ce2b603L, 0x9ad2b174L, 0x3947d5eaL, 0xaf77d29dL, 0x1526db04L, - 0x8316dc73L, 0x120b63e3L, 0x843b6494L, 0x3e6a6d0dL, 0xa85a6a7aL, - 0x0bcf0ee4L, 0x9dff0993L, 0x27ae000aL, 0xb19e077dL, 0x44930ff0L, - 0xd2a30887L, 0x68f2011eL, 0xfec20669L, 0x5d5762f7L, 0xcb676580L, - 0x71366c19L, 0xe7066b6eL, 0x761bd4feL, 0xe02bd389L, 0x5a7ada10L, - 0xcc4add67L, 0x6fdfb9f9L, 0xf9efbe8eL, 0x43beb717L, 0xd58eb060L, - 0xe8a3d6d6L, 0x7e93d1a1L, 0xc4c2d838L, 0x52f2df4fL, 0xf167bbd1L, - 0x6757bca6L, 0xdd06b53fL, 0x4b36b248L, 0xda2b0dd8L, 0x4c1b0aafL, - 0xf64a0336L, 0x607a0441L, 0xc3ef60dfL, 0x55df67a8L, 0xef8e6e31L, - 0x79be6946L, 0x8cb361cbL, 0x1a8366bcL, 0xa0d26f25L, 0x36e26852L, - 0x95770cccL, 0x03470bbbL, 0xb9160222L, 0x2f260555L, 0xbe3bbac5L, - 0x280bbdb2L, 0x925ab42bL, 0x046ab35cL, 0xa7ffd7c2L, 0x31cfd0b5L, - 0x8b9ed92cL, 0x1daede5bL, 0xb0c2649bL, 0x26f263ecL, 0x9ca36a75L, - 0x0a936d02L, 0xa906099cL, 0x3f360eebL, 0x85670772L, 0x13570005L, - 0x824abf95L, 0x147ab8e2L, 0xae2bb17bL, 0x381bb60cL, 0x9b8ed292L, - 0x0dbed5e5L, 0xb7efdc7cL, 0x21dfdb0bL, 0xd4d2d386L, 0x42e2d4f1L, - 0xf8b3dd68L, 0x6e83da1fL, 0xcd16be81L, 0x5b26b9f6L, 0xe177b06fL, - 0x7747b718L, 0xe65a0888L, 0x706a0fffL, 0xca3b0666L, 0x5c0b0111L, - 0xff9e658fL, 0x69ae62f8L, 0xd3ff6b61L, 0x45cf6c16L, 0x78e20aa0L, - 0xeed20dd7L, 0x5483044eL, 0xc2b30339L, 0x612667a7L, 0xf71660d0L, - 0x4d476949L, 0xdb776e3eL, 0x4a6ad1aeL, 0xdc5ad6d9L, 0x660bdf40L, - 0xf03bd837L, 0x53aebca9L, 0xc59ebbdeL, 0x7fcfb247L, 0xe9ffb530L, - 0x1cf2bdbdL, 0x8ac2bacaL, 0x3093b353L, 0xa6a3b424L, 0x0536d0baL, - 0x9306d7cdL, 0x2957de54L, 0xbf67d923L, 0x2e7a66b3L, 0xb84a61c4L, - 0x021b685dL, 0x942b6f2aL, 0x37be0bb4L, 0xa18e0cc3L, 0x1bdf055aL, - 0x8def022dL + 0x00000000L, 0x96300777L, 0x2c610eeeL, 0xba510999L, 0x19c46d07L, + 0x8ff46a70L, 0x35a563e9L, 0xa395649eL, 0x3288db0eL, 0xa4b8dc79L, + 0x1ee9d5e0L, 0x88d9d297L, 0x2b4cb609L, 0xbd7cb17eL, 0x072db8e7L, + 0x911dbf90L, 0x6410b71dL, 0xf220b06aL, 0x4871b9f3L, 0xde41be84L, + 0x7dd4da1aL, 0xebe4dd6dL, 0x51b5d4f4L, 0xc785d383L, 0x56986c13L, + 0xc0a86b64L, 0x7af962fdL, 0xecc9658aL, 0x4f5c0114L, 0xd96c0663L, + 0x633d0ffaL, 0xf50d088dL, 0xc8206e3bL, 0x5e10694cL, 0xe44160d5L, + 0x727167a2L, 0xd1e4033cL, 0x47d4044bL, 0xfd850dd2L, 0x6bb50aa5L, + 0xfaa8b535L, 0x6c98b242L, 0xd6c9bbdbL, 0x40f9bcacL, 0xe36cd832L, + 0x755cdf45L, 0xcf0dd6dcL, 0x593dd1abL, 0xac30d926L, 0x3a00de51L, + 0x8051d7c8L, 0x1661d0bfL, 0xb5f4b421L, 0x23c4b356L, 0x9995bacfL, + 0x0fa5bdb8L, 0x9eb80228L, 0x0888055fL, 0xb2d90cc6L, 0x24e90bb1L, + 0x877c6f2fL, 0x114c6858L, 0xab1d61c1L, 0x3d2d66b6L, 0x9041dc76L, + 0x0671db01L, 0xbc20d298L, 0x2a10d5efL, 0x8985b171L, 0x1fb5b606L, + 0xa5e4bf9fL, 0x33d4b8e8L, 0xa2c90778L, 0x34f9000fL, 0x8ea80996L, + 0x18980ee1L, 0xbb0d6a7fL, 0x2d3d6d08L, 0x976c6491L, 0x015c63e6L, + 0xf4516b6bL, 0x62616c1cL, 0xd8306585L, 0x4e0062f2L, 0xed95066cL, + 0x7ba5011bL, 0xc1f40882L, 0x57c40ff5L, 0xc6d9b065L, 0x50e9b712L, + 0xeab8be8bL, 0x7c88b9fcL, 0xdf1ddd62L, 0x492dda15L, 0xf37cd38cL, + 0x654cd4fbL, 0x5861b24dL, 0xce51b53aL, 0x7400bca3L, 0xe230bbd4L, + 0x41a5df4aL, 0xd795d83dL, 0x6dc4d1a4L, 0xfbf4d6d3L, 0x6ae96943L, + 0xfcd96e34L, 0x468867adL, 0xd0b860daL, 0x732d0444L, 0xe51d0333L, + 0x5f4c0aaaL, 0xc97c0dddL, 0x3c710550L, 0xaa410227L, 0x10100bbeL, + 0x86200cc9L, 0x25b56857L, 0xb3856f20L, 0x09d466b9L, 0x9fe461ceL, + 0x0ef9de5eL, 0x98c9d929L, 0x2298d0b0L, 0xb4a8d7c7L, 0x173db359L, + 0x810db42eL, 0x3b5cbdb7L, 0xad6cbac0L, 0x2083b8edL, 0xb6b3bf9aL, + 0x0ce2b603L, 0x9ad2b174L, 0x3947d5eaL, 0xaf77d29dL, 0x1526db04L, + 0x8316dc73L, 0x120b63e3L, 0x843b6494L, 0x3e6a6d0dL, 0xa85a6a7aL, + 0x0bcf0ee4L, 0x9dff0993L, 0x27ae000aL, 0xb19e077dL, 0x44930ff0L, + 0xd2a30887L, 0x68f2011eL, 0xfec20669L, 0x5d5762f7L, 0xcb676580L, + 0x71366c19L, 0xe7066b6eL, 0x761bd4feL, 0xe02bd389L, 0x5a7ada10L, + 0xcc4add67L, 0x6fdfb9f9L, 0xf9efbe8eL, 0x43beb717L, 0xd58eb060L, + 0xe8a3d6d6L, 0x7e93d1a1L, 0xc4c2d838L, 0x52f2df4fL, 0xf167bbd1L, + 0x6757bca6L, 0xdd06b53fL, 0x4b36b248L, 0xda2b0dd8L, 0x4c1b0aafL, + 0xf64a0336L, 0x607a0441L, 0xc3ef60dfL, 0x55df67a8L, 0xef8e6e31L, + 0x79be6946L, 0x8cb361cbL, 0x1a8366bcL, 0xa0d26f25L, 0x36e26852L, + 0x95770cccL, 0x03470bbbL, 0xb9160222L, 0x2f260555L, 0xbe3bbac5L, + 0x280bbdb2L, 0x925ab42bL, 0x046ab35cL, 0xa7ffd7c2L, 0x31cfd0b5L, + 0x8b9ed92cL, 0x1daede5bL, 0xb0c2649bL, 0x26f263ecL, 0x9ca36a75L, + 0x0a936d02L, 0xa906099cL, 0x3f360eebL, 0x85670772L, 0x13570005L, + 0x824abf95L, 0x147ab8e2L, 0xae2bb17bL, 0x381bb60cL, 0x9b8ed292L, + 0x0dbed5e5L, 0xb7efdc7cL, 0x21dfdb0bL, 0xd4d2d386L, 0x42e2d4f1L, + 0xf8b3dd68L, 0x6e83da1fL, 0xcd16be81L, 0x5b26b9f6L, 0xe177b06fL, + 0x7747b718L, 0xe65a0888L, 0x706a0fffL, 0xca3b0666L, 0x5c0b0111L, + 0xff9e658fL, 0x69ae62f8L, 0xd3ff6b61L, 0x45cf6c16L, 0x78e20aa0L, + 0xeed20dd7L, 0x5483044eL, 0xc2b30339L, 0x612667a7L, 0xf71660d0L, + 0x4d476949L, 0xdb776e3eL, 0x4a6ad1aeL, 0xdc5ad6d9L, 0x660bdf40L, + 0xf03bd837L, 0x53aebca9L, 0xc59ebbdeL, 0x7fcfb247L, 0xe9ffb530L, + 0x1cf2bdbdL, 0x8ac2bacaL, 0x3093b353L, 0xa6a3b424L, 0x0536d0baL, + 0x9306d7cdL, 0x2957de54L, 0xbf67d923L, 0x2e7a66b3L, 0xb84a61c4L, + 0x021b685dL, 0x942b6f2aL, 0x37be0bb4L, 0xa18e0cc3L, 0x1bdf055aL, + 0x8def022dL #else - 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, - 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, - 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, - 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, - 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, - 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, - 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, - 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, - 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, - 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, - 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, - 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, - 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, - 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, - 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, - 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, - 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, - 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, - 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, - 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, - 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, - 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, - 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, - 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, - 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, - 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, - 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, - 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, - 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, - 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, - 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, - 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, - 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, - 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, - 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, - 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, - 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, - 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, - 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, - 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, - 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, - 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, - 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, - 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, - 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, - 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, - 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, - 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, - 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, - 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, - 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, - 0x2d02ef8dL + 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, + 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, + 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, + 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, + 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, + 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, + 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, + 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, + 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, + 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, + 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, + 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, + 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, + 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, + 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, + 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, + 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, + 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, + 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, + 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, + 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, + 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, + 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, + 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, + 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, + 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, + 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, + 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, + 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, + 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, + 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, + 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, + 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, + 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, + 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, + 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, + 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, + 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, + 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, + 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, + 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, + 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, + 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, + 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, + 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, + 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, + 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, + 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, + 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, + 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, + 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, + 0x2d02ef8dL #endif }; EbmlCrc32::EbmlCrc32() { - ResetCRC(); - SetDefaultSize(4); - m_crc_final = 0; - SetSize_(4); - //This EbmlElement has been set -// SetValueIsSet(); + ResetCRC(); + SetDefaultSize(4); + m_crc_final = 0; + SetSize_(4); + //This EbmlElement has been set +// SetValueIsSet(); } EbmlCrc32::EbmlCrc32(const EbmlCrc32 & ElementToClone) :EbmlBinary(ElementToClone) { - m_crc = ElementToClone.m_crc; - m_crc_final = ElementToClone.m_crc_final; + m_crc = ElementToClone.m_crc; + m_crc_final = ElementToClone.m_crc_final; } void EbmlCrc32::ResetCRC() @@ -191,163 +191,163 @@ void EbmlCrc32::UpdateByte(binary b) void EbmlCrc32::AddElementCRC32(EbmlElement &ElementToCRC) { - // Use a special IOCallback class that Render's to memory instead of to disk - MemIOCallback memoryBuffer; - ElementToCRC.Render(memoryBuffer, true, true); + // Use a special IOCallback class that Render's to memory instead of to disk + MemIOCallback memoryBuffer; + ElementToCRC.Render(memoryBuffer, true, true); - Update(memoryBuffer.GetDataBuffer(), memoryBuffer.GetDataBufferSize()); -// Finalize(); + Update(memoryBuffer.GetDataBuffer(), memoryBuffer.GetDataBufferSize()); +// Finalize(); }; bool EbmlCrc32::CheckElementCRC32(EbmlElement &ElementToCRC) { - MemIOCallback memoryBuffer; - ElementToCRC.Render(memoryBuffer); + MemIOCallback memoryBuffer; + ElementToCRC.Render(memoryBuffer); - return CheckCRC(m_crc_final, memoryBuffer.GetDataBuffer(), memoryBuffer.GetDataBufferSize()); + return CheckCRC(m_crc_final, memoryBuffer.GetDataBuffer(), memoryBuffer.GetDataBufferSize()); }; filepos_t EbmlCrc32::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - filepos_t Result = 4; + filepos_t Result = 4; - if (Result != 0) { - output.writeFully(&m_crc_final, Result); - } + if (Result != 0) { + output.writeFully(&m_crc_final, Result); + } - if (Result < GetDefaultSize()) { - // pad the rest with 0 - binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; - if (Pad != NULL) { - memset(Pad, 0x00, GetDefaultSize() - Result); - output.writeFully(Pad, GetDefaultSize() - Result); + if (Result < GetDefaultSize()) { + // pad the rest with 0 + binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; + if (Pad != NULL) { + memset(Pad, 0x00, GetDefaultSize() - Result); + output.writeFully(Pad, GetDefaultSize() - Result); - Result = GetDefaultSize(); - delete [] Pad; - } - } + Result = GetDefaultSize(); + delete [] Pad; + } + } - return Result; + return Result; } filepos_t EbmlCrc32::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - binary *Buffer = new (std::nothrow) binary[GetSize()]; - if (Buffer == NULL) { - // impossible to read, skip it - input.setFilePointer(GetSize(), seek_current); - } else { - input.readFully(Buffer, GetSize()); + if (ReadFully != SCOPE_NO_DATA) + { + binary *Buffer = new (std::nothrow) binary[GetSize()]; + if (Buffer == NULL) { + // impossible to read, skip it + input.setFilePointer(GetSize(), seek_current); + } else { + input.readFully(Buffer, GetSize()); - memcpy((void *)&m_crc_final, Buffer, 4); - delete [] Buffer; - SetValueIsSet(); - } - } + memcpy((void *)&m_crc_final, Buffer, 4); + delete [] Buffer; + SetValueIsSet(); + } + } - return GetSize(); + return GetSize(); } bool EbmlCrc32::CheckCRC(uint32 inputCRC, const binary *input, uint32 length) { - uint32 crc = CRC32_NEGL; + uint32 crc = CRC32_NEGL; - for(; !IsAligned(input) && length > 0; length--) - crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); + for(; !IsAligned(input) && length > 0; length--) + crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); - while (length >= 4) - { - crc ^= *(const uint32 *)input; - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - length -= 4; - input += 4; - } + while (length >= 4) + { + crc ^= *(const uint32 *)input; + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + length -= 4; + input += 4; + } - while (length--) - crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); + while (length--) + crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); - //Now we finalize the CRC32 - crc ^= CRC32_NEGL; - - if (crc == inputCRC) - return true; - - return false; + //Now we finalize the CRC32 + crc ^= CRC32_NEGL; + + if (crc == inputCRC) + return true; + + return false; }; void EbmlCrc32::FillCRC32(const binary *s, uint32 n) { - ResetCRC(); - Update(s, n); - Finalize(); - - /*uint32 crc = CRC32_NEGL; + ResetCRC(); + Update(s, n); + Finalize(); - for(; !IsAligned(s) && n > 0; n--) - crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc); + /*uint32 crc = CRC32_NEGL; - while (n >= 4) - { - crc ^= *(const uint32 *)s; - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - n -= 4; - s += 4; - } + for(; !IsAligned(s) && n > 0; n--) + crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc); - while (n--) - crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc); + while (n >= 4) + { + crc ^= *(const uint32 *)s; + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + n -= 4; + s += 4; + } - m_crc = crc; + while (n--) + crc = m_tab[CRC32_INDEX(crc) ^ *s++] ^ CRC32_SHIFTED(crc); - //Now we finalize the CRC32 - m_crc ^= CRC32_NEGL; - //for (unsigned int i = 0; i < 4; i++) - // (&last_crc32)[i] = GetCrcByte(i);*/ + m_crc = crc; + + //Now we finalize the CRC32 + m_crc ^= CRC32_NEGL; + //for (unsigned int i = 0; i < 4; i++) + // (&last_crc32)[i] = GetCrcByte(i);*/ } void EbmlCrc32::Update(const binary *input, uint32 length) { - uint32 crc = m_crc; + uint32 crc = m_crc; - for(; !IsAligned(input) && length > 0; length--) - crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); + for(; !IsAligned(input) && length > 0; length--) + crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); - while (length >= 4) - { - crc ^= *(const uint32 *)input; - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); - length -= 4; - input += 4; - } + while (length >= 4) + { + crc ^= *(const uint32 *)input; + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + crc = m_tab[CRC32_INDEX(crc)] ^ CRC32_SHIFTED(crc); + length -= 4; + input += 4; + } - while (length--) - crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); + while (length--) + crc = m_tab[CRC32_INDEX(crc) ^ *input++] ^ CRC32_SHIFTED(crc); - m_crc = crc; + m_crc = crc; } void EbmlCrc32::Finalize() { - //Finalize the CRC32 - m_crc ^= CRC32_NEGL; - //Copy it over to completed CRC32 memeber - m_crc_final = m_crc; - //Reset the holding CRC member (m_crc) - ResetCRC(); - //This EbmlElement has been set - SetValueIsSet(); + //Finalize the CRC32 + m_crc ^= CRC32_NEGL; + //Copy it over to completed CRC32 memeber + m_crc_final = m_crc; + //Reset the holding CRC member (m_crc) + ResetCRC(); + //This EbmlElement has been set + SetValueIsSet(); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlDate.cpp b/src/EbmlDate.cpp index 597fdcd..59cb3b1 100644 --- a/src/EbmlDate.cpp +++ b/src/EbmlDate.cpp @@ -27,9 +27,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlDate.cpp 1079 2005-03-03 13:18:14Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlDate.cpp 1079 2005-03-03 13:18:14Z robux4 $ + \author Steve Lhomme */ #include @@ -42,47 +42,47 @@ const uint64 EbmlDate::UnixEpochDelay = 978307200; // 2001/01/01 00:00:00 UTC EbmlDate::EbmlDate(const EbmlDate & ElementToClone) :EbmlElement(ElementToClone) { - myDate = ElementToClone.myDate; + myDate = ElementToClone.myDate; } filepos_t EbmlDate::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - if (GetSize() != 0) { - assert(GetSize() == 8); - binary Buffer[8]; - input.readFully(Buffer, GetSize()); + if (ReadFully != SCOPE_NO_DATA) + { + if (GetSize() != 0) { + assert(GetSize() == 8); + binary Buffer[8]; + input.readFully(Buffer, GetSize()); - big_int64 b64; - b64.Eval(Buffer); + big_int64 b64; + b64.Eval(Buffer); - myDate = b64; - SetValueIsSet(); - } - } + myDate = b64; + SetValueIsSet(); + } + } - return GetSize(); + return GetSize(); } filepos_t EbmlDate::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - if (GetSize() != 0) { - assert(GetSize() == 8); - big_int64 b64(myDate); + if (GetSize() != 0) { + assert(GetSize() == 8); + big_int64 b64(myDate); - output.writeFully(&b64.endian(),GetSize()); - } + output.writeFully(&b64.endian(),GetSize()); + } - return GetSize(); + return GetSize(); } bool EbmlDate::IsSmallerThan(const EbmlElement *Cmp) const { - if (EbmlId(*this) == EbmlId(*Cmp)) - return this->myDate < static_cast(Cmp)->myDate; - else - return false; + if (EbmlId(*this) == EbmlId(*Cmp)) + return this->myDate < static_cast(Cmp)->myDate; + else + return false; } END_LIBEBML_NAMESPACE diff --git a/src/EbmlDummy.cpp b/src/EbmlDummy.cpp index 2bb6d62..5faaa03 100644 --- a/src/EbmlDummy.cpp +++ b/src/EbmlDummy.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include "ebml/EbmlDummy.h" #include "ebml/EbmlContexts.h" diff --git a/src/EbmlElement.cpp b/src/EbmlElement.cpp index ffc0fde..5a3dd65 100644 --- a/src/EbmlElement.cpp +++ b/src/EbmlElement.cpp @@ -27,9 +27,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include @@ -45,170 +45,170 @@ START_LIBEBML_NAMESPACE /*! - \todo handle more than CodedSize of 5 + \todo handle more than CodedSize of 5 */ int CodedSizeLength(uint64 Length, unsigned int SizeLength, bool bSizeFinite) { - unsigned int CodedSize; - if (bSizeFinite) { - // prepare the head of the size (000...01xxxxxx) - // optimal size - if (Length < 127) // 2^7 - 1 - CodedSize = 1; - else if (Length < 16383) // 2^14 - 1 - CodedSize = 2; - else if (Length < 2097151L) // 2^21 - 1 - CodedSize = 3; - else if (Length < 268435455L) // 2^28 - 1 - CodedSize = 4; - else CodedSize = 5; - } else { - if (Length <= 127) // 2^7 - 1 - CodedSize = 1; - else if (Length <= 16383) // 2^14 - 1 - CodedSize = 2; - else if (Length <= 2097151L) // 2^21 - 1 - CodedSize = 3; - else if (Length <= 268435455L) // 2^28 - 1 - CodedSize = 4; - else CodedSize = 5; - } + unsigned int CodedSize; + if (bSizeFinite) { + // prepare the head of the size (000...01xxxxxx) + // optimal size + if (Length < 127) // 2^7 - 1 + CodedSize = 1; + else if (Length < 16383) // 2^14 - 1 + CodedSize = 2; + else if (Length < 2097151L) // 2^21 - 1 + CodedSize = 3; + else if (Length < 268435455L) // 2^28 - 1 + CodedSize = 4; + else CodedSize = 5; + } else { + if (Length <= 127) // 2^7 - 1 + CodedSize = 1; + else if (Length <= 16383) // 2^14 - 1 + CodedSize = 2; + else if (Length <= 2097151L) // 2^21 - 1 + CodedSize = 3; + else if (Length <= 268435455L) // 2^28 - 1 + CodedSize = 4; + else CodedSize = 5; + } - if (SizeLength > 0 && CodedSize < SizeLength) { - // defined size - CodedSize = SizeLength; - } + if (SizeLength > 0 && CodedSize < SizeLength) { + // defined size + CodedSize = SizeLength; + } - return CodedSize; + return CodedSize; } /*! - \todo handle more than CodedSize of 5 + \todo handle more than CodedSize of 5 */ int CodedSizeLengthSigned(int64 Length, unsigned int SizeLength) { - unsigned int CodedSize; - // prepare the head of the size (000...01xxxxxx) - // optimal size - if (Length > -64 && Length < 64) // 2^6 - CodedSize = 1; - else if (Length > -8192 && Length < 8192) // 2^13 - CodedSize = 2; - else if (Length > -1048576L && Length < 1048576L) // 2^20 - CodedSize = 3; - else if (Length > -134217728L && Length < 134217728L) // 2^27 - CodedSize = 4; - else CodedSize = 5; + unsigned int CodedSize; + // prepare the head of the size (000...01xxxxxx) + // optimal size + if (Length > -64 && Length < 64) // 2^6 + CodedSize = 1; + else if (Length > -8192 && Length < 8192) // 2^13 + CodedSize = 2; + else if (Length > -1048576L && Length < 1048576L) // 2^20 + CodedSize = 3; + else if (Length > -134217728L && Length < 134217728L) // 2^27 + CodedSize = 4; + else CodedSize = 5; - if (SizeLength > 0 && CodedSize < SizeLength) { - // defined size - CodedSize = SizeLength; - } + if (SizeLength > 0 && CodedSize < SizeLength) { + // defined size + CodedSize = SizeLength; + } - return CodedSize; + return CodedSize; } int CodedValueLength(uint64 Length, int CodedSize, binary * OutBuffer) { - int _SizeMask = 0xFF; - OutBuffer[0] = 1 << (8 - CodedSize); - for (int i=1; i>= 8; - _SizeMask >>= 1; - } - // first one use a OR with the "EBML size head" - OutBuffer[0] |= Length & 0xFF & _SizeMask; - return CodedSize; + int _SizeMask = 0xFF; + OutBuffer[0] = 1 << (8 - CodedSize); + for (int i=1; i>= 8; + _SizeMask >>= 1; + } + // first one use a OR with the "EBML size head" + OutBuffer[0] |= Length & 0xFF & _SizeMask; + return CodedSize; } int CodedValueLengthSigned(int64 Length, int CodedSize, binary * OutBuffer) { - if (Length > -64 && Length < 64) // 2^6 - Length += 63; - else if (Length > -8192 && Length < 8192) // 2^13 - Length += 8191; - else if (Length > -1048576L && Length < 1048576L) // 2^20 - Length += 1048575L; - else if (Length > -134217728L && Length < 134217728L) // 2^27 - Length += 134217727L; + if (Length > -64 && Length < 64) // 2^6 + Length += 63; + else if (Length > -8192 && Length < 8192) // 2^13 + Length += 8191; + else if (Length > -1048576L && Length < 1048576L) // 2^20 + Length += 1048575L; + else if (Length > -134217728L && Length < 134217728L) // 2^27 + Length += 134217727L; - return CodedValueLength(Length, CodedSize, OutBuffer); + return CodedValueLength(Length, CodedSize, OutBuffer); } uint64 ReadCodedSizeValue(const binary * InBuffer, uint32 & BufferSize, uint64 & SizeUnknown) { - binary SizeBitMask = 1 << 7; - uint64 Result = 0x7F; - unsigned int SizeIdx, PossibleSizeLength = 0; - binary PossibleSize[8]; - memset(PossibleSize, 0, 8); + binary SizeBitMask = 1 << 7; + uint64 Result = 0x7F; + unsigned int SizeIdx, PossibleSizeLength = 0; + binary PossibleSize[8]; + memset(PossibleSize, 0, 8); - SizeUnknown = 0x7F; // the last bit is discarded when computing the size - for (SizeIdx = 0; SizeIdx < BufferSize && SizeIdx < 8; SizeIdx++) { - if (InBuffer[0] & (SizeBitMask >> SizeIdx)) { - // ID found - PossibleSizeLength = SizeIdx + 1; - SizeBitMask >>= SizeIdx; - for (SizeIdx = 0; SizeIdx < PossibleSizeLength; SizeIdx++) { - PossibleSize[SizeIdx] = InBuffer[SizeIdx]; - } - for (SizeIdx = 0; SizeIdx < PossibleSizeLength - 1; SizeIdx++) { - Result <<= 7; - Result |= 0xFF; - } + SizeUnknown = 0x7F; // the last bit is discarded when computing the size + for (SizeIdx = 0; SizeIdx < BufferSize && SizeIdx < 8; SizeIdx++) { + if (InBuffer[0] & (SizeBitMask >> SizeIdx)) { + // ID found + PossibleSizeLength = SizeIdx + 1; + SizeBitMask >>= SizeIdx; + for (SizeIdx = 0; SizeIdx < PossibleSizeLength; SizeIdx++) { + PossibleSize[SizeIdx] = InBuffer[SizeIdx]; + } + for (SizeIdx = 0; SizeIdx < PossibleSizeLength - 1; SizeIdx++) { + Result <<= 7; + Result |= 0xFF; + } - Result = 0; - Result |= PossibleSize[0] & ~SizeBitMask; - for (unsigned int i = 1; i 4) { - return NULL; // we don't support element IDs over class D - } - if (PossibleId[0] & BitMask) { - // this is the last octet of the ID - // check wether that's the one we're looking for -/* if (PossibleID == EBML_INFO_ID(ClassInfos)) { - break; - } else { - /// \todo This element should be skipped (use a context ?) - }*/ - bElementFound = true; /// \todo not exactly the one we're looking for - break; - } - BitMask >>= 1; - } + binary BitMask; + uint64 aElementPosition, aSizePosition; + while (!bElementFound) { + // read ID + aElementPosition = DataStream.getFilePointer(); + uint32 ReadSize = 0; + BitMask = 1 << 7; + while (1) { + ReadSize += DataStream.read(&PossibleId[PossibleID_Length], 1); + if (ReadSize == uint32(PossibleID_Length)) { + return NULL; // no more data ? + } + if (++PossibleID_Length > 4) { + return NULL; // we don't support element IDs over class D + } + if (PossibleId[0] & BitMask) { + // this is the last octet of the ID + // check wether that's the one we're looking for +/* if (PossibleID == EBML_INFO_ID(ClassInfos)) { + break; + } else { + /// \todo This element should be skipped (use a context ?) + }*/ + bElementFound = true; /// \todo not exactly the one we're looking for + break; + } + BitMask >>= 1; + } - // read the data size - aSizePosition = DataStream.getFilePointer(); - uint32 _SizeLength; - do { - if (PossibleSizeLength >= 8) - // Size is larger than 8 bytes - return NULL; + // read the data size + aSizePosition = DataStream.getFilePointer(); + uint32 _SizeLength; + do { + if (PossibleSizeLength >= 8) + // Size is larger than 8 bytes + return NULL; - ReadSize += DataStream.read(&PossibleSize[PossibleSizeLength++], 1); - _SizeLength = PossibleSizeLength; - SizeFound = ReadCodedSizeValue(&PossibleSize[0], _SizeLength, SizeUnknown); - } while (_SizeLength == 0); - } + ReadSize += DataStream.read(&PossibleSize[PossibleSizeLength++], 1); + _SizeLength = PossibleSizeLength; + SizeFound = ReadCodedSizeValue(&PossibleSize[0], _SizeLength, SizeUnknown); + } while (_SizeLength == 0); + } - EbmlElement *Result = NULL; - EbmlId PossibleID(PossibleId, PossibleID_Length); - if (PossibleID == EBML_INFO_ID(ClassInfos)) { - // the element is the one expected - Result = &EBML_INFO_CREATE(ClassInfos); - } else { - /// \todo find the element in the context - Result = new (std::nothrow) EbmlDummy(PossibleID); + EbmlElement *Result = NULL; + EbmlId PossibleID(PossibleId, PossibleID_Length); + if (PossibleID == EBML_INFO_ID(ClassInfos)) { + // the element is the one expected + Result = &EBML_INFO_CREATE(ClassInfos); + } else { + /// \todo find the element in the context + Result = new (std::nothrow) EbmlDummy(PossibleID); if(Result == NULL) return NULL; - } + } - Result->SetSizeLength(PossibleSizeLength); + Result->SetSizeLength(PossibleSizeLength); - Result->Size = SizeFound; + Result->Size = SizeFound; - if (!Result->ValidateSize() || (SizeFound != SizeUnknown && MaxDataSize < Result->Size)) { - delete Result; - return NULL; - } + if (!Result->ValidateSize() || (SizeFound != SizeUnknown && MaxDataSize < Result->Size)) { + delete Result; + return NULL; + } - // check if the size is not all 1s - if (SizeFound == SizeUnknown) { - // Size of this element is unknown - // only possible for Master elements - if (!Result->SetSizeInfinite()) { - /// \todo the element is not allowed to be infinite - delete Result; - return NULL; - } - } else Result->SetSizeInfinite(false); - Result->ElementPosition = aElementPosition; - Result->SizePosition = aSizePosition; + // check if the size is not all 1s + if (SizeFound == SizeUnknown) { + // Size of this element is unknown + // only possible for Master elements + if (!Result->SetSizeInfinite()) { + /// \todo the element is not allowed to be infinite + delete Result; + return NULL; + } + } else Result->SetSizeInfinite(false); + Result->ElementPosition = aElementPosition; + Result->SizePosition = aSizePosition; - return Result; + return Result; } /*! - \todo replace the new RawElement with the appropriate class (when known) - \todo skip data for Dummy elements when they are not allowed - \todo better check of the size checking for upper elements (using a list of size for each level) - \param LowLevel Will be returned with the level of the element found compared to the context given + \todo replace the new RawElement with the appropriate class (when known) + \todo skip data for Dummy elements when they are not allowed + \todo better check of the size checking for upper elements (using a list of size for each level) + \param LowLevel Will be returned with the level of the element found compared to the context given */ EbmlElement * EbmlElement::FindNextElement(IOCallback & DataStream, const EbmlSemanticContext & Context, int & UpperLevel, - uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel) + uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel) { - int PossibleID_Length = 0; - binary PossibleIdNSize[16]; - int PossibleSizeLength; - uint64 SizeUnknown; - int ReadIndex = 0; // trick for the algo, start index at 0 - uint32 ReadSize = 0; - uint64 SizeFound; - int SizeIdx; - bool bFound; - int UpperLevel_original = UpperLevel; + int PossibleID_Length = 0; + binary PossibleIdNSize[16]; + int PossibleSizeLength; + uint64 SizeUnknown; + int ReadIndex = 0; // trick for the algo, start index at 0 + uint32 ReadSize = 0; + uint64 SizeFound; + int SizeIdx; + bool bFound; + int UpperLevel_original = UpperLevel; - do { - // read a potential ID - do { - assert(ReadIndex < 16); - // build the ID with the current Read Buffer - bFound = false; - binary IdBitMask = 1 << 7; - for (SizeIdx = 0; SizeIdx < ReadIndex && SizeIdx < 4; SizeIdx++) { - if (PossibleIdNSize[0] & (IdBitMask >> SizeIdx)) { - // ID found - PossibleID_Length = SizeIdx + 1; - IdBitMask >>= SizeIdx; - bFound = true; - break; - } - } - if (bFound) { - break; - } + do { + // read a potential ID + do { + assert(ReadIndex < 16); + // build the ID with the current Read Buffer + bFound = false; + binary IdBitMask = 1 << 7; + for (SizeIdx = 0; SizeIdx < ReadIndex && SizeIdx < 4; SizeIdx++) { + if (PossibleIdNSize[0] & (IdBitMask >> SizeIdx)) { + // ID found + PossibleID_Length = SizeIdx + 1; + IdBitMask >>= SizeIdx; + bFound = true; + break; + } + } + if (bFound) { + break; + } - if (ReadIndex >= 4) { - // ID not found - // shift left the read octets - memmove(&PossibleIdNSize[0],&PossibleIdNSize[1], --ReadIndex); - } + if (ReadIndex >= 4) { + // ID not found + // shift left the read octets + memmove(&PossibleIdNSize[0],&PossibleIdNSize[1], --ReadIndex); + } - if (DataStream.read(&PossibleIdNSize[ReadIndex++], 1) == 0) { - return NULL; // no more data ? - } - ReadSize++; + if (DataStream.read(&PossibleIdNSize[ReadIndex++], 1) == 0) { + return NULL; // no more data ? + } + ReadSize++; - } while (!bFound && MaxDataSize > ReadSize); + } while (!bFound && MaxDataSize > ReadSize); - SizeIdx = ReadIndex; - ReadIndex -= PossibleID_Length; + SizeIdx = ReadIndex; + ReadIndex -= PossibleID_Length; - // read the data size - uint32 _SizeLength; - PossibleSizeLength = ReadIndex; - while (1) - { - _SizeLength = PossibleSizeLength; - SizeFound = ReadCodedSizeValue(&PossibleIdNSize[PossibleID_Length], _SizeLength, SizeUnknown); - if (_SizeLength != 0) { - bFound = true; - break; - } - if (PossibleSizeLength >= 8) { - bFound = false; - break; - } - ReadSize += DataStream.read(&PossibleIdNSize[SizeIdx++], 1); - PossibleSizeLength++; - } + // read the data size + uint32 _SizeLength; + PossibleSizeLength = ReadIndex; + while (1) + { + _SizeLength = PossibleSizeLength; + SizeFound = ReadCodedSizeValue(&PossibleIdNSize[PossibleID_Length], _SizeLength, SizeUnknown); + if (_SizeLength != 0) { + bFound = true; + break; + } + if (PossibleSizeLength >= 8) { + bFound = false; + break; + } + ReadSize += DataStream.read(&PossibleIdNSize[SizeIdx++], 1); + PossibleSizeLength++; + } - if (bFound) { - // find the element in the context and use the correct creator - EbmlId PossibleID(PossibleIdNSize, PossibleID_Length); - EbmlElement * Result = CreateElementUsingContext(PossibleID, Context, UpperLevel, false, AllowDummyElt, MaxLowerLevel); - ///< \todo continue is misplaced - if (Result != NULL) { - if (AllowDummyElt || !Result->IsDummy()) { - Result->SetSizeLength(_SizeLength); + if (bFound) { + // find the element in the context and use the correct creator + EbmlId PossibleID(PossibleIdNSize, PossibleID_Length); + EbmlElement * Result = CreateElementUsingContext(PossibleID, Context, UpperLevel, false, AllowDummyElt, MaxLowerLevel); + ///< \todo continue is misplaced + if (Result != NULL) { + if (AllowDummyElt || !Result->IsDummy()) { + Result->SetSizeLength(_SizeLength); - Result->Size = SizeFound; - // UpperLevel values - // -1 : global element - // 0 : child - // 1 : same level - // + : further parent - if (Result->ValidateSize() && (SizeFound == SizeUnknown || UpperLevel > 0 || MaxDataSize == 0 || MaxDataSize >= (PossibleID_Length + PossibleSizeLength + SizeFound))) { - if (SizeFound == SizeUnknown) { - Result->SetSizeInfinite(); - } + Result->Size = SizeFound; + // UpperLevel values + // -1 : global element + // 0 : child + // 1 : same level + // + : further parent + if (Result->ValidateSize() && (SizeFound == SizeUnknown || UpperLevel > 0 || MaxDataSize == 0 || MaxDataSize >= (PossibleID_Length + PossibleSizeLength + SizeFound))) { + if (SizeFound == SizeUnknown) { + Result->SetSizeInfinite(); + } - Result->SizePosition = DataStream.getFilePointer() - SizeIdx + EBML_ID_LENGTH(PossibleID); - Result->ElementPosition = Result->SizePosition - EBML_ID_LENGTH(PossibleID); - // place the file at the beggining of the data - DataStream.setFilePointer(Result->SizePosition + _SizeLength); - return Result; - } - } - delete Result; - } - } + Result->SizePosition = DataStream.getFilePointer() - SizeIdx + EBML_ID_LENGTH(PossibleID); + Result->ElementPosition = Result->SizePosition - EBML_ID_LENGTH(PossibleID); + // place the file at the beggining of the data + DataStream.setFilePointer(Result->SizePosition + _SizeLength); + return Result; + } + } + delete Result; + } + } - // recover all the data in the buffer minus one byte - ReadIndex = SizeIdx - 1; - memmove(&PossibleIdNSize[0], &PossibleIdNSize[1], ReadIndex); - UpperLevel = UpperLevel_original; - } while ( MaxDataSize > DataStream.getFilePointer() - SizeIdx + PossibleID_Length ); + // recover all the data in the buffer minus one byte + ReadIndex = SizeIdx - 1; + memmove(&PossibleIdNSize[0], &PossibleIdNSize[1], ReadIndex); + UpperLevel = UpperLevel_original; + } while ( MaxDataSize > DataStream.getFilePointer() - SizeIdx + PossibleID_Length ); - return NULL; + return NULL; } /*! - \todo what happens if we are in a upper element with a known size ? + \todo what happens if we are in a upper element with a known size ? */ EbmlElement * EbmlElement::SkipData(EbmlStream & DataStream, const EbmlSemanticContext & Context, EbmlElement * TestReadElt, bool AllowDummyElt) { - EbmlElement * Result = NULL; - if (bSizeIsFinite) { - assert(TestReadElt == NULL); - assert(ElementPosition < SizePosition); - DataStream.I_O().setFilePointer(SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size, seek_beginning); -// DataStream.I_O().setFilePointer(Size, seek_current); - } else { - ///////////////////////////////////////////////// - // read elements until an upper element is found - ///////////////////////////////////////////////// - bool bEndFound = false; - while (!bEndFound && Result == NULL) { - // read an element - /// \todo 0xFF... and true should be configurable -// EbmlElement * NewElt; - if (TestReadElt == NULL) { - int bUpperElement = 0; // trick to call FindNextID correctly - Result = DataStream.FindNextElement(Context, bUpperElement, 0xFFFFFFFFL, AllowDummyElt); - } else { - Result = TestReadElt; + EbmlElement * Result = NULL; + if (bSizeIsFinite) { + assert(TestReadElt == NULL); + assert(ElementPosition < SizePosition); + DataStream.I_O().setFilePointer(SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size, seek_beginning); +// DataStream.I_O().setFilePointer(Size, seek_current); + } else { + ///////////////////////////////////////////////// + // read elements until an upper element is found + ///////////////////////////////////////////////// + bool bEndFound = false; + while (!bEndFound && Result == NULL) { + // read an element + /// \todo 0xFF... and true should be configurable +// EbmlElement * NewElt; + if (TestReadElt == NULL) { + int bUpperElement = 0; // trick to call FindNextID correctly + Result = DataStream.FindNextElement(Context, bUpperElement, 0xFFFFFFFFL, AllowDummyElt); + } else { + Result = TestReadElt; TestReadElt = NULL; - } + } - if (Result != NULL) { - unsigned int EltIndex; - // data known in this Master's context - for (EltIndex = 0; EltIndex < EBML_CTX_SIZE(Context); EltIndex++) { - if (EbmlId(*Result) == EBML_CTX_IDX_ID(Context,EltIndex)) { - // skip the data with its own context - Result = Result->SkipData(DataStream, EBML_SEM_CONTEXT(EBML_CTX_IDX(Context,EltIndex)), NULL); - break; // let's go to the next ID - } - } + if (Result != NULL) { + unsigned int EltIndex; + // data known in this Master's context + for (EltIndex = 0; EltIndex < EBML_CTX_SIZE(Context); EltIndex++) { + if (EbmlId(*Result) == EBML_CTX_IDX_ID(Context,EltIndex)) { + // skip the data with its own context + Result = Result->SkipData(DataStream, EBML_SEM_CONTEXT(EBML_CTX_IDX(Context,EltIndex)), NULL); + break; // let's go to the next ID + } + } - if (EltIndex >= EBML_CTX_SIZE(Context)) { - if (EBML_CTX_PARENT(Context) != NULL) { - Result = SkipData(DataStream, *EBML_CTX_PARENT(Context), Result); - } else { - assert(Context.GetGlobalContext != NULL); - if (Context != Context.GetGlobalContext()) { - Result = SkipData(DataStream, Context.GetGlobalContext(), Result); - } else { - bEndFound = true; - } - } - } - } else { - bEndFound = true; - } - } - } - return Result; + if (EltIndex >= EBML_CTX_SIZE(Context)) { + if (EBML_CTX_PARENT(Context) != NULL) { + Result = SkipData(DataStream, *EBML_CTX_PARENT(Context), Result); + } else { + assert(Context.GetGlobalContext != NULL); + if (Context != Context.GetGlobalContext()) { + Result = SkipData(DataStream, Context.GetGlobalContext(), Result); + } else { + bEndFound = true; + } + } + } + } else { + bEndFound = true; + } + } + } + return Result; } EbmlElement *EbmlElement::CreateElementUsingContext(const EbmlId & aID, const EbmlSemanticContext & Context, - int & LowLevel, bool IsGlobalContext, bool bAllowDummy, unsigned int MaxLowerLevel) + int & LowLevel, bool IsGlobalContext, bool bAllowDummy, unsigned int MaxLowerLevel) { - unsigned int ContextIndex; - EbmlElement *Result = NULL; + unsigned int ContextIndex; + EbmlElement *Result = NULL; - // elements at the current level - for (ContextIndex = 0; ContextIndex < EBML_CTX_SIZE(Context); ContextIndex++) { - if (aID == EBML_CTX_IDX_ID(Context,ContextIndex)) { + // elements at the current level + for (ContextIndex = 0; ContextIndex < EBML_CTX_SIZE(Context); ContextIndex++) { + if (aID == EBML_CTX_IDX_ID(Context,ContextIndex)) { return &EBML_SEM_CREATE(EBML_CTX_IDX(Context,ContextIndex)); - } - } + } + } - // global elements - assert(Context.GetGlobalContext != NULL); // global should always exist, at least the EBML ones - const EbmlSemanticContext & tstContext = Context.GetGlobalContext(); - if (tstContext != Context) { - LowLevel--; - MaxLowerLevel--; - // recursive is good, but be carefull... - Result = CreateElementUsingContext(aID, tstContext, LowLevel, true, bAllowDummy, MaxLowerLevel); - if (Result != NULL) { - return Result; - } - LowLevel++; - MaxLowerLevel++; - } else { - return NULL; - } + // global elements + assert(Context.GetGlobalContext != NULL); // global should always exist, at least the EBML ones + const EbmlSemanticContext & tstContext = Context.GetGlobalContext(); + if (tstContext != Context) { + LowLevel--; + MaxLowerLevel--; + // recursive is good, but be carefull... + Result = CreateElementUsingContext(aID, tstContext, LowLevel, true, bAllowDummy, MaxLowerLevel); + if (Result != NULL) { + return Result; + } + LowLevel++; + MaxLowerLevel++; + } else { + return NULL; + } - // parent elements - if (EBML_CTX_MASTER(Context) != NULL && aID == EBML_INFO_ID(*EBML_CTX_MASTER(Context))) { - LowLevel++; // already one level up (same as context) - return &EBML_INFO_CREATE(*EBML_CTX_MASTER(Context)); - } + // parent elements + if (EBML_CTX_MASTER(Context) != NULL && aID == EBML_INFO_ID(*EBML_CTX_MASTER(Context))) { + LowLevel++; // already one level up (same as context) + return &EBML_INFO_CREATE(*EBML_CTX_MASTER(Context)); + } - // check wether it's not part of an upper context - if (EBML_CTX_PARENT(Context) != NULL) { - LowLevel++; - MaxLowerLevel++; - return CreateElementUsingContext(aID, *EBML_CTX_PARENT(Context), LowLevel, IsGlobalContext, bAllowDummy, MaxLowerLevel); - } + // check wether it's not part of an upper context + if (EBML_CTX_PARENT(Context) != NULL) { + LowLevel++; + MaxLowerLevel++; + return CreateElementUsingContext(aID, *EBML_CTX_PARENT(Context), LowLevel, IsGlobalContext, bAllowDummy, MaxLowerLevel); + } - if (!IsGlobalContext && bAllowDummy) { - LowLevel = 0; - Result = new (std::nothrow) EbmlDummy(aID); - } + if (!IsGlobalContext && bAllowDummy) { + LowLevel = 0; + Result = new (std::nothrow) EbmlDummy(aID); + } - return Result; + return Result; } /*! - \todo verify that the size written is the same as the data written + \todo verify that the size written is the same as the data written */ filepos_t EbmlElement::Render(IOCallback & output, bool bWithDefault, bool bKeepPosition, bool bForceRender) { - assert(bValueIsSet || (bWithDefault && DefaultISset())); // an element is been rendered without a value set !!! - // it may be a mandatory element without a default value - try { - if (!bWithDefault && IsDefaultValue()) { - return 0; - } + assert(bValueIsSet || (bWithDefault && DefaultISset())); // an element is been rendered without a value set !!! + // it may be a mandatory element without a default value + try { + if (!bWithDefault && IsDefaultValue()) { + return 0; + } #if defined(LIBEBML_DEBUG) - uint64 SupposedSize = UpdateSize(bWithDefault, bForceRender); + uint64 SupposedSize = UpdateSize(bWithDefault, bForceRender); #endif // LIBEBML_DEBUG - filepos_t result = RenderHead(output, bForceRender, bWithDefault, bKeepPosition); - uint64 WrittenSize = RenderData(output, bForceRender, bWithDefault); + filepos_t result = RenderHead(output, bForceRender, bWithDefault, bKeepPosition); + uint64 WrittenSize = RenderData(output, bForceRender, bWithDefault); #if defined(LIBEBML_DEBUG) - if (static_cast(SupposedSize) != (0-1)) assert(WrittenSize == SupposedSize); + if (static_cast(SupposedSize) != (0-1)) assert(WrittenSize == SupposedSize); #endif // LIBEBML_DEBUG - result += WrittenSize; - return result; - } catch (std::exception & ex) { -// const char * What = ex.what(); - assert(false); // we should never be here ! - return 0; - } + result += WrittenSize; + return result; + } catch (std::exception & ex) { +// const char * What = ex.what(); + assert(false); // we should never be here ! + return 0; + } } /*! - \todo store the position of the Size writing for elements with unknown size - \todo handle exceptions on errors - \todo handle CodeSize bigger than 5 bytes + \todo store the position of the Size writing for elements with unknown size + \todo handle exceptions on errors + \todo handle CodeSize bigger than 5 bytes */ filepos_t EbmlElement::RenderHead(IOCallback & output, bool bForceRender, bool bWithDefault, bool bKeepPosition) { - if (EBML_ID_LENGTH((const EbmlId&)*this) <= 0 || EBML_ID_LENGTH((const EbmlId&)*this) > 4) - return 0; + if (EBML_ID_LENGTH((const EbmlId&)*this) <= 0 || EBML_ID_LENGTH((const EbmlId&)*this) > 4) + return 0; - UpdateSize(bWithDefault, bForceRender); + UpdateSize(bWithDefault, bForceRender); - return MakeRenderHead(output, bKeepPosition); + return MakeRenderHead(output, bKeepPosition); } filepos_t EbmlElement::MakeRenderHead(IOCallback & output, bool bKeepPosition) { - binary FinalHead[4+8]; // Class D + 64 bits coded size - unsigned int FinalHeadSize; + binary FinalHead[4+8]; // Class D + 64 bits coded size + unsigned int FinalHeadSize; - FinalHeadSize = EBML_ID_LENGTH((const EbmlId&)*this); - EbmlId(*this).Fill(FinalHead); + FinalHeadSize = EBML_ID_LENGTH((const EbmlId&)*this); + EbmlId(*this).Fill(FinalHead); - int CodedSize = CodedSizeLength(Size, SizeLength, bSizeIsFinite); - CodedValueLength(Size, CodedSize, &FinalHead[FinalHeadSize]); - FinalHeadSize += CodedSize; + int CodedSize = CodedSizeLength(Size, SizeLength, bSizeIsFinite); + CodedValueLength(Size, CodedSize, &FinalHead[FinalHeadSize]); + FinalHeadSize += CodedSize; - output.writeFully(FinalHead, FinalHeadSize); - if (!bKeepPosition) { - ElementPosition = output.getFilePointer() - FinalHeadSize; - SizePosition = ElementPosition + EBML_ID_LENGTH((const EbmlId&)*this); - } + output.writeFully(FinalHead, FinalHeadSize); + if (!bKeepPosition) { + ElementPosition = output.getFilePointer() - FinalHeadSize; + SizePosition = ElementPosition + EBML_ID_LENGTH((const EbmlId&)*this); + } - return FinalHeadSize; + return FinalHeadSize; } uint64 EbmlElement::ElementSize(bool bWithDefault) const { - if (!bWithDefault && IsDefaultValue()) - return 0; // won't be saved - return Size + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite); + if (!bWithDefault && IsDefaultValue()) + return 0; // won't be saved + return Size + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite); } bool EbmlElement::IsSmallerThan(const EbmlElement *Cmp) const { - return EbmlId(*this) == EbmlId(*Cmp); + return EbmlId(*this) == EbmlId(*Cmp); } bool EbmlElement::CompareElements(const EbmlElement *A, const EbmlElement *B) { - if (EbmlId(*A) == EbmlId(*B)) - return A->IsSmallerThan(B); - else - return false; + if (EbmlId(*A) == EbmlId(*B)) + return A->IsSmallerThan(B); + else + return false; } void EbmlElement::Read(EbmlStream & inDataStream, const EbmlSemanticContext & /* Context */, int & /* UpperEltFound */, EbmlElement * & /* FoundElt */, bool /* AllowDummyElt */, ScopeMode ReadFully) { - ReadData(inDataStream.I_O(), ReadFully); + ReadData(inDataStream.I_O(), ReadFully); } bool EbmlElement::ForceSize(uint64 NewSize) { - if (bSizeIsFinite) { - return false; - } + if (bSizeIsFinite) { + return false; + } - int OldSizeLen = CodedSizeLength(Size, SizeLength, bSizeIsFinite); - uint64 OldSize = Size; + int OldSizeLen = CodedSizeLength(Size, SizeLength, bSizeIsFinite); + uint64 OldSize = Size; - Size = NewSize; + Size = NewSize; - if (CodedSizeLength(Size, SizeLength, bSizeIsFinite) == OldSizeLen) { - bSizeIsFinite = true; - return true; - } - Size = OldSize; + if (CodedSizeLength(Size, SizeLength, bSizeIsFinite) == OldSizeLen) { + bSizeIsFinite = true; + return true; + } + Size = OldSize; - return false; + return false; } filepos_t EbmlElement::OverwriteHead(IOCallback & output, bool bKeepPosition) { - if (ElementPosition == 0) { - return 0; // the element has not been written - } + if (ElementPosition == 0) { + return 0; // the element has not been written + } - uint64 CurrentPosition = output.getFilePointer(); - output.setFilePointer(GetElementPosition()); - filepos_t Result = MakeRenderHead(output, bKeepPosition); - output.setFilePointer(CurrentPosition); - return Result; + uint64 CurrentPosition = output.getFilePointer(); + output.setFilePointer(GetElementPosition()); + filepos_t Result = MakeRenderHead(output, bKeepPosition); + output.setFilePointer(CurrentPosition); + return Result; } uint64 EbmlElement::VoidMe(IOCallback & output, bool bWithDefault) { - if (ElementPosition == 0) { - return 0; // the element has not been written - } + if (ElementPosition == 0) { + return 0; // the element has not been written + } - EbmlVoid Dummy; - return Dummy.Overwrite(*this, output, bWithDefault); + EbmlVoid Dummy; + return Dummy.Overwrite(*this, output, bWithDefault); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlFloat.cpp b/src/EbmlFloat.cpp index 6b184ef..be46491 100644 --- a/src/EbmlFloat.cpp +++ b/src/EbmlFloat.cpp @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include @@ -43,14 +43,14 @@ START_LIBEBML_NAMESPACE EbmlFloat::EbmlFloat(const EbmlFloat::Precision prec) :EbmlElement(0, false) { - SetPrecision(prec); + SetPrecision(prec); } EbmlFloat::EbmlFloat(const double aDefaultValue, const EbmlFloat::Precision prec) :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue) { - SetDefaultIsSet(); - SetPrecision(prec); + SetDefaultIsSet(); + SetPrecision(prec); } EbmlFloat::EbmlFloat(const EbmlFloat & ElementToClone) @@ -83,76 +83,76 @@ EbmlFloat & EbmlFloat::SetValue(double NewValue) { } /*! - \todo handle exception on errors - \todo handle 10 bits precision + \todo handle exception on errors + \todo handle 10 bits precision */ filepos_t EbmlFloat::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - assert(GetSize() == 4 || GetSize() == 8); + assert(GetSize() == 4 || GetSize() == 8); - if (GetSize() == 4) { - float val = Value; - int Tmp; - memcpy(&Tmp, &val, 4); - big_int32 TmpToWrite(Tmp); - output.writeFully(&TmpToWrite.endian(), GetSize()); - } else if (GetSize() == 8) { - double val = Value; - int64 Tmp; - memcpy(&Tmp, &val, 8); - big_int64 TmpToWrite(Tmp); - output.writeFully(&TmpToWrite.endian(), GetSize()); - } + if (GetSize() == 4) { + float val = Value; + int Tmp; + memcpy(&Tmp, &val, 4); + big_int32 TmpToWrite(Tmp); + output.writeFully(&TmpToWrite.endian(), GetSize()); + } else if (GetSize() == 8) { + double val = Value; + int64 Tmp; + memcpy(&Tmp, &val, 8); + big_int64 TmpToWrite(Tmp); + output.writeFully(&TmpToWrite.endian(), GetSize()); + } - return GetSize(); + return GetSize(); } uint64 EbmlFloat::UpdateSize(bool bWithDefault, bool /* bForceRender */) { - if (!bWithDefault && IsDefaultValue()) - return 0; - return GetSize(); + if (!bWithDefault && IsDefaultValue()) + return 0; + return GetSize(); } /*! - \todo remove the hack for possible endianess pb (test on little & big endian) + \todo remove the hack for possible endianess pb (test on little & big endian) */ filepos_t EbmlFloat::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - binary Buffer[20]; - assert(GetSize() <= 20); - input.readFully(Buffer, GetSize()); + if (ReadFully != SCOPE_NO_DATA) + { + binary Buffer[20]; + assert(GetSize() <= 20); + input.readFully(Buffer, GetSize()); - if (GetSize() == 4) { - big_int32 TmpRead; - TmpRead.Eval(Buffer); - int32 tmpp = int32(TmpRead); - float val; - memcpy(&val, &tmpp, 4); - Value = val; - SetValueIsSet(); - } else if (GetSize() == 8) { - big_int64 TmpRead; - TmpRead.Eval(Buffer); - int64 tmpp = int64(TmpRead); - double val; - memcpy(&val, &tmpp, 8); - Value = val; - SetValueIsSet(); - } - } + if (GetSize() == 4) { + big_int32 TmpRead; + TmpRead.Eval(Buffer); + int32 tmpp = int32(TmpRead); + float val; + memcpy(&val, &tmpp, 4); + Value = val; + SetValueIsSet(); + } else if (GetSize() == 8) { + big_int64 TmpRead; + TmpRead.Eval(Buffer); + int64 tmpp = int64(TmpRead); + double val; + memcpy(&val, &tmpp, 8); + Value = val; + SetValueIsSet(); + } + } - return GetSize(); + return GetSize(); } bool EbmlFloat::IsSmallerThan(const EbmlElement *Cmp) const { - if (EbmlId(*this) == EbmlId(*Cmp)) - return this->Value < static_cast(Cmp)->Value; - else - return false; + if (EbmlId(*this) == EbmlId(*Cmp)) + return this->Value < static_cast(Cmp)->Value; + else + return false; } END_LIBEBML_NAMESPACE diff --git a/src/EbmlHead.cpp b/src/EbmlHead.cpp index f439f8f..f3af3bd 100644 --- a/src/EbmlHead.cpp +++ b/src/EbmlHead.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlHead.cpp 1096 2005-03-17 09:14:52Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlHead.cpp 1096 2005-03-17 09:14:52Z robux4 $ + \author Steve Lhomme */ #include "ebml/EbmlHead.h" #include "ebml/EbmlSubHead.h" diff --git a/src/EbmlMaster.cpp b/src/EbmlMaster.cpp index 0c3afcc..be6b517 100644 --- a/src/EbmlMaster.cpp +++ b/src/EbmlMaster.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include @@ -47,9 +47,9 @@ START_LIBEBML_NAMESPACE EbmlMaster::EbmlMaster(const EbmlSemanticContext & aContext, bool bSizeIsknown) :EbmlElement(0), Context(aContext), bChecksumUsed(bChecksumUsedByDefault) { - SetSizeIsFinite(bSizeIsknown); - SetValueIsSet(); - ProcessMandatory(); + SetSizeIsFinite(bSizeIsknown); + SetValueIsSet(); + ProcessMandatory(); } EbmlMaster::EbmlMaster(const EbmlMaster & ElementToClone) @@ -59,500 +59,500 @@ EbmlMaster::EbmlMaster(const EbmlMaster & ElementToClone) ,bChecksumUsed(ElementToClone.bChecksumUsed) ,Checksum(ElementToClone.Checksum) { - // add a clone of the list - std::vector::const_iterator Itr = ElementToClone.ElementList.begin(); - std::vector::iterator myItr = ElementList.begin(); - while (Itr != ElementToClone.ElementList.end()) - { - *myItr = (*Itr)->Clone(); - ++Itr; ++myItr; - } + // add a clone of the list + std::vector::const_iterator Itr = ElementToClone.ElementList.begin(); + std::vector::iterator myItr = ElementList.begin(); + while (Itr != ElementToClone.ElementList.end()) + { + *myItr = (*Itr)->Clone(); + ++Itr; ++myItr; + } } EbmlMaster::~EbmlMaster() { - assert(!IsLocked()); // you're trying to delete a locked element !!! + assert(!IsLocked()); // you're trying to delete a locked element !!! - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if (!(*ElementList[Index]).IsLocked()) { - delete ElementList[Index]; - } - } + size_t Index; + + for (Index = 0; Index < ElementList.size(); Index++) { + if (!(*ElementList[Index]).IsLocked()) { + delete ElementList[Index]; + } + } } /*! - \todo handle exception on errors - \todo write all the Mandatory elements in the Context, otherwise assert + \todo handle exception on errors + \todo write all the Mandatory elements in the Context, otherwise assert */ filepos_t EbmlMaster::RenderData(IOCallback & output, bool bForceRender, bool bWithDefault) { - filepos_t Result = 0; - size_t Index; + filepos_t Result = 0; + size_t Index; - if (!bForceRender) { - assert(CheckMandatory()); - } + if (!bForceRender) { + assert(CheckMandatory()); + } - if (!bChecksumUsed) { // old school - for (Index = 0; Index < ElementList.size(); Index++) { - if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) - continue; - Result += (ElementList[Index])->Render(output, bWithDefault, false ,bForceRender); - } - } else { // new school - MemIOCallback TmpBuf(GetSize() - 6); - for (Index = 0; Index < ElementList.size(); Index++) { - if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) - continue; - (ElementList[Index])->Render(TmpBuf, bWithDefault, false ,bForceRender); - } - Checksum.FillCRC32(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); - Result += Checksum.Render(output, true, false ,bForceRender); - output.writeFully(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); - Result += TmpBuf.GetDataBufferSize(); - } + if (!bChecksumUsed) { // old school + for (Index = 0; Index < ElementList.size(); Index++) { + if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) + continue; + Result += (ElementList[Index])->Render(output, bWithDefault, false ,bForceRender); + } + } else { // new school + MemIOCallback TmpBuf(GetSize() - 6); + for (Index = 0; Index < ElementList.size(); Index++) { + if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) + continue; + (ElementList[Index])->Render(TmpBuf, bWithDefault, false ,bForceRender); + } + Checksum.FillCRC32(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); + Result += Checksum.Render(output, true, false ,bForceRender); + output.writeFully(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); + Result += TmpBuf.GetDataBufferSize(); + } - return Result; + return Result; } /*! - \todo We might be able to forbid elements that don't exist in the context + \todo We might be able to forbid elements that don't exist in the context */ bool EbmlMaster::PushElement(EbmlElement & element) { - ElementList.push_back(&element); - return true; + ElementList.push_back(&element); + return true; } uint64 EbmlMaster::UpdateSize(bool bWithDefault, bool bForceRender) { - SetSize_(0); + SetSize_(0); - if (!IsFiniteSize()) - return (0-1); + if (!IsFiniteSize()) + return (0-1); - if (!bForceRender) { - assert(CheckMandatory()); + if (!bForceRender) { + assert(CheckMandatory()); } - - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) - continue; - (ElementList[Index])->UpdateSize(bWithDefault, bForceRender); - uint64 SizeToAdd = (ElementList[Index])->ElementSize(bWithDefault); -#if defined(LIBEBML_DEBUG) - if (static_cast(SizeToAdd) == (0-1)) - return (0-1); -#endif // LIBEBML_DEBUG - SetSize_(GetSize() + SizeToAdd); - } - if (bChecksumUsed) { - SetSize_(GetSize() + Checksum.ElementSize()); - } - return GetSize(); + size_t Index; + + for (Index = 0; Index < ElementList.size(); Index++) { + if (!bWithDefault && (ElementList[Index])->IsDefaultValue()) + continue; + (ElementList[Index])->UpdateSize(bWithDefault, bForceRender); + uint64 SizeToAdd = (ElementList[Index])->ElementSize(bWithDefault); +#if defined(LIBEBML_DEBUG) + if (static_cast(SizeToAdd) == (0-1)) + return (0-1); +#endif // LIBEBML_DEBUG + SetSize_(GetSize() + SizeToAdd); + } + if (bChecksumUsed) { + SetSize_(GetSize() + Checksum.ElementSize()); + } + + return GetSize(); } filepos_t EbmlMaster::WriteHead(IOCallback & output, int nSizeLength, bool bWithDefault) { - SetSizeLength(nSizeLength); - return RenderHead(output, false, bWithDefault); + SetSizeLength(nSizeLength); + return RenderHead(output, false, bWithDefault); } /*! - \todo this code is very suspicious ! + \todo this code is very suspicious ! */ filepos_t EbmlMaster::ReadData(IOCallback & input, ScopeMode /* ReadFully */) { - input.setFilePointer(GetSize(), seek_current); - return GetSize(); + input.setFilePointer(GetSize(), seek_current); + return GetSize(); } /*! - \note Hopefully no global element is mandatory - \todo should be called for ALL EbmlMaster element on construction + \note Hopefully no global element is mandatory + \todo should be called for ALL EbmlMaster element on construction */ bool EbmlMaster::ProcessMandatory() { - if (EBML_CTX_SIZE(Context) == 0) - { - return true; - } + if (EBML_CTX_SIZE(Context) == 0) + { + return true; + } - assert(Context.GetSize() != 0); + assert(Context.GetSize() != 0); - unsigned int EltIdx; - for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { - if (EBML_CTX_IDX(Context,EltIdx).IsMandatory() && EBML_CTX_IDX(Context,EltIdx).IsUnique()) { -// assert(EBML_CTX_IDX(Context,EltIdx).Create != NULL); + unsigned int EltIdx; + for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { + if (EBML_CTX_IDX(Context,EltIdx).IsMandatory() && EBML_CTX_IDX(Context,EltIdx).IsUnique()) { +// assert(EBML_CTX_IDX(Context,EltIdx).Create != NULL); PushElement(EBML_SEM_CREATE(EBML_CTX_IDX(Context,EltIdx))); - } - } - return true; + } + } + return true; } bool EbmlMaster::CheckMandatory() const { - assert(Context.GetSize() != 0); + assert(Context.GetSize() != 0); - unsigned int EltIdx; - for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { - if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) { - if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) { + unsigned int EltIdx; + for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { + if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) { + if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) { #if defined(LIBEBML_DEBUG) - // you are missing this Mandatory element -// const char * MissingName = EBML_INFO_NAME(EBML_CTX_IDX_INFO(Context,EltIdx)); + // you are missing this Mandatory element +// const char * MissingName = EBML_INFO_NAME(EBML_CTX_IDX_INFO(Context,EltIdx)); #endif // LIBEBML_DEBUG - return false; - } - } - } + return false; + } + } + } - return true; + return true; } std::vector EbmlMaster::FindAllMissingElements() -{ - assert(Context.GetSize() != 0); +{ + assert(Context.GetSize() != 0); - std::vector missingElements; + std::vector missingElements; - for (size_t ChildElementNo = 0; ChildElementNo < ElementList.size(); ChildElementNo++) { - EbmlElement *childElement = ElementList[ChildElementNo]; - if (!childElement->ValueIsSet()) { - std::string missingValue; - missingValue = "The Child Element \""; - missingValue.append(EBML_NAME(childElement)); - missingValue.append("\" of EbmlMaster \""); - missingValue.append(EBML_NAME(this)); - missingValue.append("\", does not have a value set."); - missingElements.push_back(missingValue); - } + for (size_t ChildElementNo = 0; ChildElementNo < ElementList.size(); ChildElementNo++) { + EbmlElement *childElement = ElementList[ChildElementNo]; + if (!childElement->ValueIsSet()) { + std::string missingValue; + missingValue = "The Child Element \""; + missingValue.append(EBML_NAME(childElement)); + missingValue.append("\" of EbmlMaster \""); + missingValue.append(EBML_NAME(this)); + missingValue.append("\", does not have a value set."); + missingElements.push_back(missingValue); + } - if (childElement->IsMaster()) { - EbmlMaster *childMaster = (EbmlMaster *)childElement; + if (childElement->IsMaster()) { + EbmlMaster *childMaster = (EbmlMaster *)childElement; - std::vector childMissingElements = childMaster->FindAllMissingElements(); - for (size_t s = 0; s < childMissingElements.size(); s++) - missingElements.push_back(childMissingElements[s]); - } - } - unsigned int EltIdx; - for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { - if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) { - if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) { - std::string missingElement; - missingElement = "Missing element \""; + std::vector childMissingElements = childMaster->FindAllMissingElements(); + for (size_t s = 0; s < childMissingElements.size(); s++) + missingElements.push_back(childMissingElements[s]); + } + } + unsigned int EltIdx; + for (EltIdx = 0; EltIdx < EBML_CTX_SIZE(Context); EltIdx++) { + if (EBML_CTX_IDX(Context,EltIdx).IsMandatory()) { + if (FindElt(EBML_CTX_IDX_INFO(Context,EltIdx)) == NULL) { + std::string missingElement; + missingElement = "Missing element \""; missingElement.append(EBML_INFO_NAME(EBML_CTX_IDX_INFO(Context,EltIdx))); - missingElement.append("\" in EbmlMaster \""); + missingElement.append("\" in EbmlMaster \""); missingElement.append(EBML_INFO_NAME(*EBML_CTX_MASTER(Context))); - missingElement.append("\""); - missingElements.push_back(missingElement); - } - } - } + missingElement.append("\""); + missingElements.push_back(missingElement); + } + } + } - return missingElements; + return missingElements; } EbmlElement *EbmlMaster::FindElt(const EbmlCallbacks & Callbacks) const { - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - EbmlElement * tmp = ElementList[Index]; - if (EbmlId(*tmp) == EBML_INFO_ID(Callbacks)) - return tmp; - } + size_t Index; - return NULL; + for (Index = 0; Index < ElementList.size(); Index++) { + EbmlElement * tmp = ElementList[Index]; + if (EbmlId(*tmp) == EBML_INFO_ID(Callbacks)) + return tmp; + } + + return NULL; } EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks, bool bCreateIfNull) { - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if (ElementList[Index] && EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks)) - return ElementList[Index]; - } - - if (bCreateIfNull) { - // add the element - EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks); - if (NewElt == NULL) - return NULL; + size_t Index; - if (!PushElement(*NewElt)) { - delete NewElt; - NewElt = NULL; - } - return NewElt; - } - - return NULL; + for (Index = 0; Index < ElementList.size(); Index++) { + if (ElementList[Index] && EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks)) + return ElementList[Index]; + } + + if (bCreateIfNull) { + // add the element + EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks); + if (NewElt == NULL) + return NULL; + + if (!PushElement(*NewElt)) { + delete NewElt; + NewElt = NULL; + } + return NewElt; + } + + return NULL; } EbmlElement *EbmlMaster::FindFirstElt(const EbmlCallbacks & Callbacks) const { - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if (EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks)) - return ElementList[Index]; - } - - return NULL; + size_t Index; + + for (Index = 0; Index < ElementList.size(); Index++) { + if (EbmlId(*(ElementList[Index])) == EBML_INFO_ID(Callbacks)) + return ElementList[Index]; + } + + return NULL; } /*! - \todo only return elements that are from the same type ! - \todo the element might be the unique in the context ! + \todo only return elements that are from the same type ! + \todo the element might be the unique in the context ! */ EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt, bool bCreateIfNull) { - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if ((ElementList[Index]) == &PastElt) { - // found past element, new one is : - Index++; - break; - } - } + size_t Index; - while (Index < ElementList.size()) { - if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index])) - break; - Index++; - } + for (Index = 0; Index < ElementList.size(); Index++) { + if ((ElementList[Index]) == &PastElt) { + // found past element, new one is : + Index++; + break; + } + } - if (Index != ElementList.size()) - return ElementList[Index]; + while (Index < ElementList.size()) { + if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index])) + break; + Index++; + } - if (bCreateIfNull) { - // add the element - EbmlElement *NewElt = &(PastElt.CreateElement()); - if (NewElt == NULL) - return NULL; + if (Index != ElementList.size()) + return ElementList[Index]; - if (!PushElement(*NewElt)) { - delete NewElt; - NewElt = NULL; - } - return NewElt; - } + if (bCreateIfNull) { + // add the element + EbmlElement *NewElt = &(PastElt.CreateElement()); + if (NewElt == NULL) + return NULL; - return NULL; + if (!PushElement(*NewElt)) { + delete NewElt; + NewElt = NULL; + } + return NewElt; + } + + return NULL; } EbmlElement *EbmlMaster::FindNextElt(const EbmlElement & PastElt) const { - size_t Index; - - for (Index = 0; Index < ElementList.size(); Index++) { - if ((ElementList[Index]) == &PastElt) { - // found past element, new one is : - Index++; - break; - } - } + size_t Index; - while (Index < ElementList.size()) { - if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index])) - return ElementList[Index]; - Index++; - } + for (Index = 0; Index < ElementList.size(); Index++) { + if ((ElementList[Index]) == &PastElt) { + // found past element, new one is : + Index++; + break; + } + } - return NULL; + while (Index < ElementList.size()) { + if ((EbmlId)PastElt == (EbmlId)(*ElementList[Index])) + return ElementList[Index]; + Index++; + } + + return NULL; } EbmlElement *EbmlMaster::AddNewElt(const EbmlCallbacks & Callbacks) { - // add the element - EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks); - if (NewElt == NULL) - return NULL; + // add the element + EbmlElement *NewElt = &EBML_INFO_CREATE(Callbacks); + if (NewElt == NULL) + return NULL; - if (!PushElement(*NewElt)) { - delete NewElt; - NewElt = NULL; - } - return NewElt; + if (!PushElement(*NewElt)) { + delete NewElt; + NewElt = NULL; + } + return NewElt; } void EbmlMaster::Sort() { - std::sort(ElementList.begin(), ElementList.end(), EbmlElement::CompareElements); + std::sort(ElementList.begin(), ElementList.end(), EbmlElement::CompareElements); } /*! - \brief Method to help reading a Master element and all subsequent children quickly - \todo add an option to discard even unknown elements - \todo handle when a mandatory element is not found + \brief Method to help reading a Master element and all subsequent children quickly + \todo add an option to discard even unknown elements + \todo handle when a mandatory element is not found */ void EbmlMaster::Read(EbmlStream & inDataStream, const EbmlSemanticContext & sContext, int & UpperEltFound, EbmlElement * & FoundElt, bool AllowDummyElt, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - EbmlElement * ElementLevelA; - // remove all existing elements, including the mandatory ones... - size_t Index; - for (Index=0; Index 0) - { - inDataStream.I_O().setFilePointer(GetSizePosition() + GetSizeLength(), seek_beginning); - ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt); - while (ElementLevelA != NULL && UpperEltFound <= 0 && MaxSizeToRead > 0) { - if (IsFiniteSize() && ElementLevelA->IsFiniteSize()) - MaxSizeToRead = GetEndPosition() - ElementLevelA->GetEndPosition(); // even if it's the default value - if (!AllowDummyElt && ElementLevelA->IsDummy()) { - if (ElementLevelA->IsFiniteSize()) { - ElementLevelA->SkipData(inDataStream, sContext); - delete ElementLevelA; // forget this unknown element - } else { - delete ElementLevelA; // forget this unknown element - break; - } - } else { - // more logical to do it afterward - ElementList.push_back(ElementLevelA); + // read blocks and discard the ones we don't care about + if (MaxSizeToRead > 0) + { + inDataStream.I_O().setFilePointer(GetSizePosition() + GetSizeLength(), seek_beginning); + ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt); + while (ElementLevelA != NULL && UpperEltFound <= 0 && MaxSizeToRead > 0) { + if (IsFiniteSize() && ElementLevelA->IsFiniteSize()) + MaxSizeToRead = GetEndPosition() - ElementLevelA->GetEndPosition(); // even if it's the default value + if (!AllowDummyElt && ElementLevelA->IsDummy()) { + if (ElementLevelA->IsFiniteSize()) { + ElementLevelA->SkipData(inDataStream, sContext); + delete ElementLevelA; // forget this unknown element + } else { + delete ElementLevelA; // forget this unknown element + break; + } + } else { + // more logical to do it afterward + ElementList.push_back(ElementLevelA); - ElementLevelA->Read(inDataStream, EBML_CONTEXT(ElementLevelA), UpperEltFound, FoundElt, AllowDummyElt, ReadFully); + ElementLevelA->Read(inDataStream, EBML_CONTEXT(ElementLevelA), UpperEltFound, FoundElt, AllowDummyElt, ReadFully); - // just in case - if (ElementLevelA->IsFiniteSize()) - ElementLevelA->SkipData(inDataStream, EBML_CONTEXT(ElementLevelA)); - else - break; - } + // just in case + if (ElementLevelA->IsFiniteSize()) + ElementLevelA->SkipData(inDataStream, EBML_CONTEXT(ElementLevelA)); + else + break; + } - if (UpperEltFound > 0) { - UpperEltFound--; - if (UpperEltFound > 0 || MaxSizeToRead <= 0) - goto processCrc; - ElementLevelA = FoundElt; - continue; - } - - if (UpperEltFound < 0) { - UpperEltFound++; - if (UpperEltFound < 0) - goto processCrc; - } + if (UpperEltFound > 0) { + UpperEltFound--; + if (UpperEltFound > 0 || MaxSizeToRead <= 0) + goto processCrc; + ElementLevelA = FoundElt; + continue; + } - if (MaxSizeToRead <= 0) - goto processCrc;// this level is finished - - ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt); - } - if (UpperEltFound > 0) { - FoundElt = ElementLevelA; - } - } - processCrc: + if (UpperEltFound < 0) { + UpperEltFound++; + if (UpperEltFound < 0) + goto processCrc; + } + + if (MaxSizeToRead <= 0) + goto processCrc;// this level is finished + + ElementLevelA = inDataStream.FindNextElement(sContext, UpperEltFound, MaxSizeToRead, AllowDummyElt); + } + if (UpperEltFound > 0) { + FoundElt = ElementLevelA; + } + } + processCrc: EBML_MASTER_ITERATOR Itr, CrcItr; for (Itr = ElementList.begin(); Itr != ElementList.end();) { - if ((EbmlId)(*(*Itr)) == EBML_ID(EbmlCrc32)) { - bChecksumUsed = true; - // remove the element - Checksum = *(static_cast(*Itr)); + if ((EbmlId)(*(*Itr)) == EBML_ID(EbmlCrc32)) { + bChecksumUsed = true; + // remove the element + Checksum = *(static_cast(*Itr)); CrcItr = Itr; break; - } + } ++Itr; - } + } if (bChecksumUsed) { - delete *CrcItr; - Remove(CrcItr); + delete *CrcItr; + Remove(CrcItr); } - SetValueIsSet(); - } + SetValueIsSet(); + } } void EbmlMaster::Remove(size_t Index) { - if (Index < ElementList.size()) { - std::vector::iterator Itr = ElementList.begin(); - while (Index-- > 0) { - ++Itr; - } + if (Index < ElementList.size()) { + std::vector::iterator Itr = ElementList.begin(); + while (Index-- > 0) { + ++Itr; + } - ElementList.erase(Itr); - } + ElementList.erase(Itr); + } } void EbmlMaster::Remove(EBML_MASTER_ITERATOR & Itr) { - ElementList.erase(Itr); + ElementList.erase(Itr); } void EbmlMaster::Remove(EBML_MASTER_RITERATOR & Itr) { - ElementList.erase(Itr.base()); + ElementList.erase(Itr.base()); } bool EbmlMaster::VerifyChecksum() const { - if (!bChecksumUsed) - return true; + if (!bChecksumUsed) + return true; - EbmlCrc32 aChecksum; - /// \todo remove the Checksum if it's in the list - /// \todo find another way when not all default values are saved or (unknown from the reader !!!) - MemIOCallback TmpBuf(GetSize() - 6); - for (size_t Index = 0; Index < ElementList.size(); Index++) { - (ElementList[Index])->Render(TmpBuf, true, false, true); - } - aChecksum.FillCRC32(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); - return (aChecksum.GetCrc32() == Checksum.GetCrc32()); + EbmlCrc32 aChecksum; + /// \todo remove the Checksum if it's in the list + /// \todo find another way when not all default values are saved or (unknown from the reader !!!) + MemIOCallback TmpBuf(GetSize() - 6); + for (size_t Index = 0; Index < ElementList.size(); Index++) { + (ElementList[Index])->Render(TmpBuf, true, false, true); + } + aChecksum.FillCRC32(TmpBuf.GetDataBuffer(), TmpBuf.GetDataBufferSize()); + return (aChecksum.GetCrc32() == Checksum.GetCrc32()); } bool EbmlMaster::InsertElement(EbmlElement & element, size_t position) { - std::vector::iterator Itr = ElementList.begin(); - while (Itr != ElementList.end() && position--) - { - ++Itr; - } - if ((Itr == ElementList.end()) && position) - return false; + std::vector::iterator Itr = ElementList.begin(); + while (Itr != ElementList.end() && position--) + { + ++Itr; + } + if ((Itr == ElementList.end()) && position) + return false; - ElementList.insert(Itr, &element); - return true; + ElementList.insert(Itr, &element); + return true; } bool EbmlMaster::InsertElement(EbmlElement & element, const EbmlElement & before) { - std::vector::iterator Itr = ElementList.begin(); - while (Itr != ElementList.end() && *Itr != &before) - { - ++Itr; - } - if (Itr == ElementList.end()) - return false; + std::vector::iterator Itr = ElementList.begin(); + while (Itr != ElementList.end() && *Itr != &before) + { + ++Itr; + } + if (Itr == ElementList.end()) + return false; - ElementList.insert(Itr, &element); - return true; + ElementList.insert(Itr, &element); + return true; } diff --git a/src/EbmlSInteger.cpp b/src/EbmlSInteger.cpp index ff3ec4a..9f95a9b 100644 --- a/src/EbmlSInteger.cpp +++ b/src/EbmlSInteger.cpp @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,10 +27,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id$ + \author Steve Lhomme + \author Moritz Bunkus */ #include @@ -45,7 +45,7 @@ EbmlSInteger::EbmlSInteger() EbmlSInteger::EbmlSInteger(int64 aDefaultValue) :EbmlElement(DEFAULT_INT_SIZE, true), Value(aDefaultValue) { - SetDefaultIsSet(); + SetDefaultIsSet(); } EbmlSInteger::EbmlSInteger(const EbmlSInteger & ElementToClone) @@ -67,89 +67,89 @@ EbmlSInteger & EbmlSInteger::SetValue(int64 NewValue) { } /*! - \todo handle exception on errors + \todo handle exception on errors */ filepos_t EbmlSInteger::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - binary FinalData[8]; // we don't handle more than 64 bits integers - unsigned int i; - - if (GetSizeLength() > 8) - return 0; // integer bigger coded on more than 64 bits are not supported - - int64 TempValue = Value; - for (i=0; i>= 8; - } - - output.writeFully(FinalData,GetSize()); + binary FinalData[8]; // we don't handle more than 64 bits integers + unsigned int i; - return GetSize(); + if (GetSizeLength() > 8) + return 0; // integer bigger coded on more than 64 bits are not supported + + int64 TempValue = Value; + for (i=0; i>= 8; + } + + output.writeFully(FinalData,GetSize()); + + return GetSize(); } uint64 EbmlSInteger::UpdateSize(bool bWithDefault, bool /* bForceRender */) { - if (!bWithDefault && IsDefaultValue()) - return 0; + if (!bWithDefault && IsDefaultValue()) + return 0; - if (Value <= 0x7F && Value >= (-0x80)) { - SetSize_(1); - } else if (Value <= 0x7FFF && Value >= (-0x8000)) { - SetSize_(2); - } else if (Value <= 0x7FFFFF && Value >= (-0x800000)) { - SetSize_(3); - } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFF) && Value >= (EBML_PRETTYLONGINT(-0x80000000))) { - SetSize_(4); - } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFF) && - Value >= EBML_PRETTYLONGINT(-0x8000000000)) { - SetSize_(5); - } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFF) && - Value >= EBML_PRETTYLONGINT(-0x800000000000)) { - SetSize_(6); - } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFFFF) && - Value >= EBML_PRETTYLONGINT(-0x80000000000000)) { - SetSize_(7); - } else { - SetSize_(8); - } + if (Value <= 0x7F && Value >= (-0x80)) { + SetSize_(1); + } else if (Value <= 0x7FFF && Value >= (-0x8000)) { + SetSize_(2); + } else if (Value <= 0x7FFFFF && Value >= (-0x800000)) { + SetSize_(3); + } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFF) && Value >= (EBML_PRETTYLONGINT(-0x80000000))) { + SetSize_(4); + } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFF) && + Value >= EBML_PRETTYLONGINT(-0x8000000000)) { + SetSize_(5); + } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFF) && + Value >= EBML_PRETTYLONGINT(-0x800000000000)) { + SetSize_(6); + } else if (Value <= EBML_PRETTYLONGINT(0x7FFFFFFFFFFFFF) && + Value >= EBML_PRETTYLONGINT(-0x80000000000000)) { + SetSize_(7); + } else { + SetSize_(8); + } - if (GetDefaultSize() > GetSize()) { - SetSize_(GetDefaultSize()); - } + if (GetDefaultSize() > GetSize()) { + SetSize_(GetDefaultSize()); + } - return GetSize(); + return GetSize(); } filepos_t EbmlSInteger::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - binary Buffer[8]; - input.readFully(Buffer, GetSize()); - - if (Buffer[0] & 0x80) - Value = -1; // this is a negative value - else - Value = 0; // this is a positive value - - for (unsigned int i=0; iValue < static_cast(Cmp)->Value; - else - return false; + if (EbmlId(*this) == EbmlId(*Cmp)) + return this->Value < static_cast(Cmp)->Value; + else + return false; } END_LIBEBML_NAMESPACE diff --git a/src/EbmlStream.cpp b/src/EbmlStream.cpp index 46e31eb..b4d7d21 100644 --- a/src/EbmlStream.cpp +++ b/src/EbmlStream.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include "ebml/EbmlStream.h" @@ -46,12 +46,12 @@ EbmlStream::~EbmlStream() EbmlElement * EbmlStream::FindNextID(const EbmlCallbacks & ClassInfos, uint64 MaxDataSize) { - return EbmlElement::FindNextID(Stream, ClassInfos, MaxDataSize); + return EbmlElement::FindNextID(Stream, ClassInfos, MaxDataSize); } EbmlElement * EbmlStream::FindNextElement(const EbmlSemanticContext & Context, int & UpperLevel, uint64 MaxDataSize, bool AllowDummyElt, unsigned int MaxLowerLevel) { - return EbmlElement::FindNextElement(Stream, Context, UpperLevel, MaxDataSize, AllowDummyElt, MaxLowerLevel); + return EbmlElement::FindNextElement(Stream, Context, UpperLevel, MaxDataSize, AllowDummyElt, MaxLowerLevel); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlString.cpp b/src/EbmlString.cpp index 7f8ee2c..6d054d6 100644 --- a/src/EbmlString.cpp +++ b/src/EbmlString.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme + \file + \version \$Id$ + \author Steve Lhomme */ #include @@ -42,26 +42,26 @@ START_LIBEBML_NAMESPACE EbmlString::EbmlString() :EbmlElement(0, false) { - SetDefaultSize(0); -/* done automatically - SetSize_(Value.length()); - if (GetDefaultSize() > GetSize()) - SetSize_(GetDefaultSize());*/ + SetDefaultSize(0); +/* done automatically + SetSize_(Value.length()); + if (GetDefaultSize() > GetSize()) + SetSize_(GetDefaultSize());*/ } EbmlString::EbmlString(const std::string & aDefaultValue) :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue) { - SetDefaultSize(0); - SetDefaultIsSet(); -/* done automatically - SetSize_(Value.length()); - if (GetDefaultSize() > GetSize()) - SetSize_(GetDefaultSize());*/ + SetDefaultSize(0); + SetDefaultIsSet(); +/* done automatically + SetSize_(Value.length()); + if (GetDefaultSize() > GetSize()) + SetSize_(GetDefaultSize());*/ } /*! - \todo Cloning should be on the same exact type ! + \todo Cloning should be on the same exact type ! */ EbmlString::EbmlString(const EbmlString & ElementToClone) :EbmlElement(ElementToClone) @@ -85,41 +85,41 @@ const std::string & EbmlString::DefaultVal() const /*! - \todo handle exception on errors + \todo handle exception on errors */ filepos_t EbmlString::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - filepos_t Result; - output.writeFully(Value.c_str(), Value.length()); - Result = Value.length(); - - if (Result < GetDefaultSize()) { - // pad the rest with 0 - binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; - if (Pad == NULL) - { - return Result; - } - memset(Pad, 0x00, GetDefaultSize() - Result); - output.writeFully(Pad, GetDefaultSize() - Result); - Result = GetDefaultSize(); - delete [] Pad; - } - - return Result; + filepos_t Result; + output.writeFully(Value.c_str(), Value.length()); + Result = Value.length(); + + if (Result < GetDefaultSize()) { + // pad the rest with 0 + binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; + if (Pad == NULL) + { + return Result; + } + memset(Pad, 0x00, GetDefaultSize() - Result); + output.writeFully(Pad, GetDefaultSize() - Result); + Result = GetDefaultSize(); + delete [] Pad; + } + + return Result; } EbmlString::operator const std::string &() const {return Value;} EbmlString & EbmlString::operator=(const std::string & NewString) { - Value = NewString; - SetValueIsSet(); -/* done automatically - SetSize_(Value.length()); - if (GetDefaultSize() > GetSize()) - SetSize_(GetDefaultSize());*/ - return *this; + Value = NewString; + SetValueIsSet(); +/* done automatically + SetSize_(Value.length()); + if (GetDefaultSize() > GetSize()) + SetSize_(GetDefaultSize());*/ + return *this; } EbmlString &EbmlString::SetValue(std::string const &NewValue) { @@ -132,42 +132,42 @@ std::string EbmlString::GetValue() const { uint64 EbmlString::UpdateSize(bool bWithDefault, bool /* bForceRender */) { - if (!bWithDefault && IsDefaultValue()) - return 0; + if (!bWithDefault && IsDefaultValue()) + return 0; - if (Value.length() < GetDefaultSize()) { - SetSize_(GetDefaultSize()); - } else { - SetSize_(Value.length()); - } - return GetSize(); + if (Value.length() < GetDefaultSize()) { + SetSize_(GetDefaultSize()); + } else { + SetSize_(Value.length()); + } + return GetSize(); } filepos_t EbmlString::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - if (GetSize() == 0) { - Value = ""; - SetValueIsSet(); - } else { - char *Buffer = new (std::nothrow) char[GetSize() + 1]; - if (Buffer == NULL) { - // unable to store the data, skip it - input.setFilePointer(GetSize(), seek_current); - } else { - input.readFully(Buffer, GetSize()); - if (Buffer[GetSize()-1] != '\0') { - Buffer[GetSize()] = '\0'; - } - Value = Buffer; - delete [] Buffer; - SetValueIsSet(); - } - } - } + if (ReadFully != SCOPE_NO_DATA) + { + if (GetSize() == 0) { + Value = ""; + SetValueIsSet(); + } else { + char *Buffer = new (std::nothrow) char[GetSize() + 1]; + if (Buffer == NULL) { + // unable to store the data, skip it + input.setFilePointer(GetSize(), seek_current); + } else { + input.readFully(Buffer, GetSize()); + if (Buffer[GetSize()-1] != '\0') { + Buffer[GetSize()] = '\0'; + } + Value = Buffer; + delete [] Buffer; + SetValueIsSet(); + } + } + } - return GetSize(); + return GetSize(); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlSubHead.cpp b/src/EbmlSubHead.cpp index 08ca47e..382b91a 100644 --- a/src/EbmlSubHead.cpp +++ b/src/EbmlSubHead.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlSubHead.cpp 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlSubHead.cpp 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme */ #include "ebml/EbmlSubHead.h" #include "ebml/EbmlContexts.h" diff --git a/src/EbmlUInteger.cpp b/src/EbmlUInteger.cpp index 1bc6267..6020aaf 100644 --- a/src/EbmlUInteger.cpp +++ b/src/EbmlUInteger.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id$ + \author Steve Lhomme + \author Moritz Bunkus */ #include @@ -47,7 +47,7 @@ EbmlUInteger::EbmlUInteger() EbmlUInteger::EbmlUInteger(uint64 aDefaultValue) :EbmlElement(DEFAULT_UINT_SIZE, true), Value(aDefaultValue), DefaultValue(aDefaultValue) { - SetDefaultIsSet(); + SetDefaultIsSet(); } EbmlUInteger::EbmlUInteger(const EbmlUInteger & ElementToClone) @@ -82,81 +82,81 @@ EbmlUInteger & EbmlUInteger::SetValue(uint64 NewValue) { } /*! - \todo handle exception on errors + \todo handle exception on errors */ filepos_t EbmlUInteger::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - binary FinalData[8]; // we don't handle more than 64 bits integers - - if (GetSizeLength() > 8) - return 0; // integer bigger coded on more than 64 bits are not supported - - uint64 TempValue = Value; - for (unsigned int i=0; i>= 8; - } - - output.writeFully(FinalData,GetSize()); + binary FinalData[8]; // we don't handle more than 64 bits integers - return GetSize(); + if (GetSizeLength() > 8) + return 0; // integer bigger coded on more than 64 bits are not supported + + uint64 TempValue = Value; + for (unsigned int i=0; i>= 8; + } + + output.writeFully(FinalData,GetSize()); + + return GetSize(); } uint64 EbmlUInteger::UpdateSize(bool bWithDefault, bool /* bForceRender */) { - if (!bWithDefault && IsDefaultValue()) - return 0; + if (!bWithDefault && IsDefaultValue()) + return 0; - if (Value <= 0xFF) { - SetSize_(1); - } else if (Value <= 0xFFFF) { - SetSize_(2); - } else if (Value <= 0xFFFFFF) { - SetSize_(3); - } else if (Value <= 0xFFFFFFFF) { - SetSize_(4); - } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFF)) { - SetSize_(5); - } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFF)) { - SetSize_(6); - } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFF)) { - SetSize_(7); - } else { - SetSize_(8); - } + if (Value <= 0xFF) { + SetSize_(1); + } else if (Value <= 0xFFFF) { + SetSize_(2); + } else if (Value <= 0xFFFFFF) { + SetSize_(3); + } else if (Value <= 0xFFFFFFFF) { + SetSize_(4); + } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFF)) { + SetSize_(5); + } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFF)) { + SetSize_(6); + } else if (Value <= EBML_PRETTYLONGINT(0xFFFFFFFFFFFFFF)) { + SetSize_(7); + } else { + SetSize_(8); + } - if (GetDefaultSize() > GetSize()) { - SetSize_(GetDefaultSize()); - } + if (GetDefaultSize() > GetSize()) { + SetSize_(GetDefaultSize()); + } - return GetSize(); + return GetSize(); } filepos_t EbmlUInteger::ReadData(IOCallback & input, ScopeMode ReadFully) { - if (ReadFully != SCOPE_NO_DATA) - { - binary Buffer[8]; - input.readFully(Buffer, GetSize()); - Value = 0; - - for (unsigned int i=0; iValue < static_cast(Cmp)->Value; - else - return false; + if (EbmlId(*this) == EbmlId(*Cmp)) + return this->Value < static_cast(Cmp)->Value; + else + return false; } END_LIBEBML_NAMESPACE diff --git a/src/EbmlUnicodeString.cpp b/src/EbmlUnicodeString.cpp index 0b0857d..ec988d2 100644 --- a/src/EbmlUnicodeString.cpp +++ b/src/EbmlUnicodeString.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,10 +29,10 @@ **********************************************************************/ /*! - \file - \version \$Id$ - \author Steve Lhomme - \author Jory Stone + \file + \version \$Id$ + \author Steve Lhomme + \author Jory Stone */ #include @@ -48,40 +48,40 @@ START_LIBEBML_NAMESPACE // ===================== UTFstring class =================== UTFstring::UTFstring() - :_Length(0) - ,_Data(NULL) + :_Length(0) + ,_Data(NULL) {} UTFstring::UTFstring(const wchar_t * _aBuf) - :_Length(0) - ,_Data(NULL) + :_Length(0) + ,_Data(NULL) { - *this = _aBuf; + *this = _aBuf; } UTFstring::UTFstring(std::wstring const &_aBuf) - :_Length(0) - ,_Data(NULL) + :_Length(0) + ,_Data(NULL) { - *this = _aBuf.c_str(); + *this = _aBuf.c_str(); } UTFstring::~UTFstring() { - delete [] _Data; + delete [] _Data; } UTFstring::UTFstring(const UTFstring & _aBuf) - :_Length(0) - ,_Data(NULL) + :_Length(0) + ,_Data(NULL) { - *this = _aBuf.c_str(); + *this = _aBuf.c_str(); } UTFstring & UTFstring::operator=(const UTFstring & _aBuf) { - *this = _aBuf.c_str(); - return *this; + *this = _aBuf.c_str(); + return *this; } UTFstring::operator const wchar_t*() const {return _Data;} @@ -89,138 +89,138 @@ UTFstring::operator const wchar_t*() const {return _Data;} UTFstring & UTFstring::operator=(const wchar_t * _aBuf) { - delete [] _Data; - if (_aBuf == NULL) { - _Data = new wchar_t[1]; - _Data[0] = 0; - UpdateFromUCS2(); - return *this; - } + delete [] _Data; + if (_aBuf == NULL) { + _Data = new wchar_t[1]; + _Data[0] = 0; + UpdateFromUCS2(); + return *this; + } - size_t aLen; - for (aLen=0; _aBuf[aLen] != 0; aLen++); - _Length = aLen; - _Data = new wchar_t[_Length+1]; - for (aLen=0; _aBuf[aLen] != 0; aLen++) { - _Data[aLen] = _aBuf[aLen]; - } - _Data[aLen] = 0; - UpdateFromUCS2(); - return *this; + size_t aLen; + for (aLen=0; _aBuf[aLen] != 0; aLen++); + _Length = aLen; + _Data = new wchar_t[_Length+1]; + for (aLen=0; _aBuf[aLen] != 0; aLen++) { + _Data[aLen] = _aBuf[aLen]; + } + _Data[aLen] = 0; + UpdateFromUCS2(); + return *this; } UTFstring & UTFstring::operator=(wchar_t _aChar) { - delete [] _Data; - _Data = new wchar_t[2]; - _Length = 1; - _Data[0] = _aChar; - _Data[1] = 0; - UpdateFromUCS2(); - return *this; + delete [] _Data; + _Data = new wchar_t[2]; + _Length = 1; + _Data[0] = _aChar; + _Data[1] = 0; + UpdateFromUCS2(); + return *this; } bool UTFstring::operator==(const UTFstring& _aStr) const { - if ((_Data == NULL) && (_aStr._Data == NULL)) - return true; - if ((_Data == NULL) || (_aStr._Data == NULL)) - return false; - return wcscmp_internal(_Data, _aStr._Data); + if ((_Data == NULL) && (_aStr._Data == NULL)) + return true; + if ((_Data == NULL) || (_aStr._Data == NULL)) + return false; + return wcscmp_internal(_Data, _aStr._Data); } void UTFstring::SetUTF8(const std::string & _aStr) { - UTF8string = _aStr; - UpdateFromUTF8(); + UTF8string = _aStr; + UpdateFromUTF8(); } /*! - \see RFC 2279 + \see RFC 2279 */ void UTFstring::UpdateFromUTF8() { - delete [] _Data; - // find the size of the final UCS-2 string - size_t i; - for (_Length=0, i=0; i(UTF8string[i]); - if (lead < 0x80) - i++; - else if ((lead >> 5) == 0x6) - i += 2; - else if ((lead >> 4) == 0xe) - i += 3; - else if ((lead >> 3) == 0x1e) - i += 4; - else - // Invalid size? - break; - } - _Data = new wchar_t[_Length+1]; - size_t j; - for (j=0, i=0; i(UTF8string[i]); - if (lead < 0x80) { - _Data[j] = lead; - i++; - } else if ((lead >> 5) == 0x6) { - _Data[j] = ((lead & 0x1F) << 6) + (UTF8string[i+1] & 0x3F); - i += 2; - } else if ((lead >> 4) == 0xe) { - _Data[j] = ((lead & 0x0F) << 12) + ((UTF8string[i+1] & 0x3F) << 6) + (UTF8string[i+2] & 0x3F); - i += 3; - } else if ((lead >> 3) == 0x1e) { - _Data[j] = ((lead & 0x07) << 18) + ((UTF8string[i+1] & 0x3F) << 12) + ((UTF8string[i+2] & 0x3F) << 6) + (UTF8string[i+3] & 0x3F); - i += 4; - } else - // Invalid char? - break; - } - _Data[j] = 0; + delete [] _Data; + // find the size of the final UCS-2 string + size_t i; + for (_Length=0, i=0; i(UTF8string[i]); + if (lead < 0x80) + i++; + else if ((lead >> 5) == 0x6) + i += 2; + else if ((lead >> 4) == 0xe) + i += 3; + else if ((lead >> 3) == 0x1e) + i += 4; + else + // Invalid size? + break; + } + _Data = new wchar_t[_Length+1]; + size_t j; + for (j=0, i=0; i(UTF8string[i]); + if (lead < 0x80) { + _Data[j] = lead; + i++; + } else if ((lead >> 5) == 0x6) { + _Data[j] = ((lead & 0x1F) << 6) + (UTF8string[i+1] & 0x3F); + i += 2; + } else if ((lead >> 4) == 0xe) { + _Data[j] = ((lead & 0x0F) << 12) + ((UTF8string[i+1] & 0x3F) << 6) + (UTF8string[i+2] & 0x3F); + i += 3; + } else if ((lead >> 3) == 0x1e) { + _Data[j] = ((lead & 0x07) << 18) + ((UTF8string[i+1] & 0x3F) << 12) + ((UTF8string[i+2] & 0x3F) << 6) + (UTF8string[i+3] & 0x3F); + i += 4; + } else + // Invalid char? + break; + } + _Data[j] = 0; } void UTFstring::UpdateFromUCS2() { - // find the size of the final UTF-8 string - size_t i,Size=0; - for (i=0; i<_Length; i++) - { - if (_Data[i] < 0x80) { - Size++; - } else if (_Data[i] < 0x800) { - Size += 2; - } else { - Size += 3; - } - } - std::string::value_type *tmpStr = new std::string::value_type[Size+1]; - for (i=0, Size=0; i<_Length; i++) - { - if (_Data[i] < 0x80) { - tmpStr[Size++] = _Data[i]; - } else if (_Data[i] < 0x800) { - tmpStr[Size++] = 0xC0 | (_Data[i] >> 6); - tmpStr[Size++] = 0x80 | (_Data[i] & 0x3F); - } else { - tmpStr[Size++] = 0xE0 | (_Data[i] >> 12); - tmpStr[Size++] = 0x80 | ((_Data[i] >> 6) & 0x3F); - tmpStr[Size++] = 0x80 | (_Data[i] & 0x3F); - } - } - tmpStr[Size] = 0; - UTF8string = tmpStr; // implicit conversion - delete [] tmpStr; + // find the size of the final UTF-8 string + size_t i,Size=0; + for (i=0; i<_Length; i++) + { + if (_Data[i] < 0x80) { + Size++; + } else if (_Data[i] < 0x800) { + Size += 2; + } else { + Size += 3; + } + } + std::string::value_type *tmpStr = new std::string::value_type[Size+1]; + for (i=0, Size=0; i<_Length; i++) + { + if (_Data[i] < 0x80) { + tmpStr[Size++] = _Data[i]; + } else if (_Data[i] < 0x800) { + tmpStr[Size++] = 0xC0 | (_Data[i] >> 6); + tmpStr[Size++] = 0x80 | (_Data[i] & 0x3F); + } else { + tmpStr[Size++] = 0xE0 | (_Data[i] >> 12); + tmpStr[Size++] = 0x80 | ((_Data[i] >> 6) & 0x3F); + tmpStr[Size++] = 0x80 | (_Data[i] & 0x3F); + } + } + tmpStr[Size] = 0; + UTF8string = tmpStr; // implicit conversion + delete [] tmpStr; } bool UTFstring::wcscmp_internal(const wchar_t *str1, const wchar_t *str2) { - size_t Index=0; - while (str1[Index] == str2[Index] && str1[Index] != 0) { - Index++; - } - return (str1[Index] == str2[Index]); + size_t Index=0; + while (str1[Index] == str2[Index] && str1[Index] != 0) { + Index++; + } + return (str1[Index] == str2[Index]); } // ===================== EbmlUnicodeString class =================== @@ -228,14 +228,14 @@ bool UTFstring::wcscmp_internal(const wchar_t *str1, const wchar_t *str2) EbmlUnicodeString::EbmlUnicodeString() :EbmlElement(0, false) { - SetDefaultSize(0); + SetDefaultSize(0); } EbmlUnicodeString::EbmlUnicodeString(const UTFstring & aDefaultValue) :EbmlElement(0, true), Value(aDefaultValue), DefaultValue(aDefaultValue) { - SetDefaultSize(0); - SetDefaultIsSet(); + SetDefaultSize(0); + SetDefaultIsSet(); } EbmlUnicodeString::EbmlUnicodeString(const EbmlUnicodeString & ElementToClone) @@ -265,34 +265,34 @@ const UTFstring & EbmlUnicodeString::DefaultVal() const */ filepos_t EbmlUnicodeString::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - uint32 Result = Value.GetUTF8().length(); + uint32 Result = Value.GetUTF8().length(); - if (Result != 0) { - output.writeFully(Value.GetUTF8().c_str(), Result); - } + if (Result != 0) { + output.writeFully(Value.GetUTF8().c_str(), Result); + } - if (Result < GetDefaultSize()) { - // pad the rest with 0 - binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; - if (Pad != NULL) { - memset(Pad, 0x00, GetDefaultSize() - Result); - output.writeFully(Pad, GetDefaultSize() - Result); + if (Result < GetDefaultSize()) { + // pad the rest with 0 + binary *Pad = new (std::nothrow) binary[GetDefaultSize() - Result]; + if (Pad != NULL) { + memset(Pad, 0x00, GetDefaultSize() - Result); + output.writeFully(Pad, GetDefaultSize() - Result); - Result = GetDefaultSize(); - delete [] Pad; - } - } + Result = GetDefaultSize(); + delete [] Pad; + } + } - return Result; + return Result; } EbmlUnicodeString::operator const UTFstring &() const {return Value;} EbmlUnicodeString & EbmlUnicodeString::operator=(const UTFstring & NewString) { - Value = NewString; - SetValueIsSet(); - return *this; + Value = NewString; + SetValueIsSet(); + return *this; } EbmlUnicodeString &EbmlUnicodeString::SetValue(UTFstring const &NewValue) { @@ -318,45 +318,45 @@ std::string EbmlUnicodeString::GetValueUTF8() const { */ uint64 EbmlUnicodeString::UpdateSize(bool bWithDefault, bool /* bForceRender */) { - if (!bWithDefault && IsDefaultValue()) - return 0; + if (!bWithDefault && IsDefaultValue()) + return 0; - SetSize_(Value.GetUTF8().length()); - if (GetSize() < GetDefaultSize()) - SetSize_(GetDefaultSize()); + SetSize_(Value.GetUTF8().length()); + if (GetSize() < GetDefaultSize()) + SetSize_(GetDefaultSize()); - return GetSize(); + return GetSize(); } /*! - \note limited to UCS-2 + \note limited to UCS-2 */ filepos_t EbmlUnicodeString::ReadData(IOCallback & input, ScopeMode ReadFully) -{ - if (ReadFully != SCOPE_NO_DATA) - { - if (GetSize() == 0) { - Value = UTFstring::value_type(0); - SetValueIsSet(); - } else { - char *Buffer = new (std::nothrow) char[GetSize()+1]; - if (Buffer == NULL) { - // impossible to read, skip it - input.setFilePointer(GetSize(), seek_current); - } else { - input.readFully(Buffer, GetSize()); - if (Buffer[GetSize()-1] != 0) { - Buffer[GetSize()] = 0; - } +{ + if (ReadFully != SCOPE_NO_DATA) + { + if (GetSize() == 0) { + Value = UTFstring::value_type(0); + SetValueIsSet(); + } else { + char *Buffer = new (std::nothrow) char[GetSize()+1]; + if (Buffer == NULL) { + // impossible to read, skip it + input.setFilePointer(GetSize(), seek_current); + } else { + input.readFully(Buffer, GetSize()); + if (Buffer[GetSize()-1] != 0) { + Buffer[GetSize()] = 0; + } - Value.SetUTF8(Buffer); // implicit conversion to std::string - delete [] Buffer; - SetValueIsSet(); - } - } - } + Value.SetUTF8(Buffer); // implicit conversion to std::string + delete [] Buffer; + SetValueIsSet(); + } + } + } - return GetSize(); + return GetSize(); } END_LIBEBML_NAMESPACE diff --git a/src/EbmlVersion.cpp b/src/EbmlVersion.cpp index 2c5ff7f..2f73c2d 100644 --- a/src/EbmlVersion.cpp +++ b/src/EbmlVersion.cpp @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlVersion.cpp 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme + \file + \version \$Id: EbmlVersion.cpp 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme */ #include "ebml/EbmlVersion.h" diff --git a/src/EbmlVoid.cpp b/src/EbmlVoid.cpp index dabd141..4510423 100644 --- a/src/EbmlVoid.cpp +++ b/src/EbmlVoid.cpp @@ -11,12 +11,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -29,9 +29,9 @@ **********************************************************************/ /*! - \file - \version \$Id: EbmlVoid.cpp 1232 2005-10-15 15:56:52Z robux4 $ - \author Steve Lhomme + \file + \version \$Id: EbmlVoid.cpp 1232 2005-10-15 15:56:52Z robux4 $ + \author Steve Lhomme */ #include "ebml/EbmlVoid.h" #include "ebml/EbmlContexts.h" @@ -42,97 +42,97 @@ DEFINE_EBML_CLASS_GLOBAL(EbmlVoid, 0xEC, 1, "EBMLVoid"); EbmlVoid::EbmlVoid() { - SetValueIsSet(); + SetValueIsSet(); } filepos_t EbmlVoid::RenderData(IOCallback & output, bool /* bForceRender */, bool /* bWithDefault */) { - // write dummy data by 4KB chunks - static binary DummyBuf[4*1024]; + // write dummy data by 4KB chunks + static binary DummyBuf[4*1024]; - uint64 SizeToWrite = GetSize(); - while (SizeToWrite > 4*1024) - { - output.writeFully(DummyBuf, 4*1024); - SizeToWrite -= 4*1024; - } - output.writeFully(DummyBuf, SizeToWrite); - return GetSize(); + uint64 SizeToWrite = GetSize(); + while (SizeToWrite > 4*1024) + { + output.writeFully(DummyBuf, 4*1024); + SizeToWrite -= 4*1024; + } + output.writeFully(DummyBuf, SizeToWrite); + return GetSize(); } uint64 EbmlVoid::ReplaceWith(EbmlElement & EltToReplaceWith, IOCallback & output, bool ComeBackAfterward, bool bWithDefault) { - EltToReplaceWith.UpdateSize(bWithDefault); - if (HeadSize() + GetSize() < EltToReplaceWith.GetSize() + EltToReplaceWith.HeadSize()) { - // the element can't be written here ! - return INVALID_FILEPOS_T; - } - if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() == 1) { - // there is not enough space to put a filling element - return INVALID_FILEPOS_T; - } + EltToReplaceWith.UpdateSize(bWithDefault); + if (HeadSize() + GetSize() < EltToReplaceWith.GetSize() + EltToReplaceWith.HeadSize()) { + // the element can't be written here ! + return INVALID_FILEPOS_T; + } + if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() == 1) { + // there is not enough space to put a filling element + return INVALID_FILEPOS_T; + } - uint64 CurrentPosition = output.getFilePointer(); + uint64 CurrentPosition = output.getFilePointer(); - output.setFilePointer(GetElementPosition()); - EltToReplaceWith.Render(output, bWithDefault); + output.setFilePointer(GetElementPosition()); + EltToReplaceWith.Render(output, bWithDefault); - if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() > 1) { - // fill the rest with another void element - EbmlVoid aTmp; - aTmp.SetSize_(HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() - 1); // 1 is the length of the Void ID - int HeadBefore = aTmp.HeadSize(); - aTmp.SetSize_(aTmp.GetSize() - CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize())); - int HeadAfter = aTmp.HeadSize(); - if (HeadBefore != HeadAfter) { - aTmp.SetSizeLength(CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize()) - (HeadAfter - HeadBefore)); - } - aTmp.RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten - } + if (HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() > 1) { + // fill the rest with another void element + EbmlVoid aTmp; + aTmp.SetSize_(HeadSize() + GetSize() - EltToReplaceWith.GetSize() - EltToReplaceWith.HeadSize() - 1); // 1 is the length of the Void ID + int HeadBefore = aTmp.HeadSize(); + aTmp.SetSize_(aTmp.GetSize() - CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize())); + int HeadAfter = aTmp.HeadSize(); + if (HeadBefore != HeadAfter) { + aTmp.SetSizeLength(CodedSizeLength(aTmp.GetSize(), aTmp.GetSizeLength(), aTmp.IsFiniteSize()) - (HeadAfter - HeadBefore)); + } + aTmp.RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten + } - if (ComeBackAfterward) { - output.setFilePointer(CurrentPosition); - } + if (ComeBackAfterward) { + output.setFilePointer(CurrentPosition); + } - return GetSize() + HeadSize(); + return GetSize() + HeadSize(); } uint64 EbmlVoid::Overwrite(const EbmlElement & EltToVoid, IOCallback & output, bool ComeBackAfterward, bool bWithDefault) { -// EltToVoid.UpdateSize(bWithDefault); - if (EltToVoid.GetElementPosition() == 0) { - // this element has never been written - return 0; - } - if (EltToVoid.GetSize() + EltToVoid.HeadSize() <2) { - // the element can't be written here ! - return 0; - } +// EltToVoid.UpdateSize(bWithDefault); + if (EltToVoid.GetElementPosition() == 0) { + // this element has never been written + return 0; + } + if (EltToVoid.GetSize() + EltToVoid.HeadSize() <2) { + // the element can't be written here ! + return 0; + } - uint64 CurrentPosition = output.getFilePointer(); + uint64 CurrentPosition = output.getFilePointer(); - output.setFilePointer(EltToVoid.GetElementPosition()); + output.setFilePointer(EltToVoid.GetElementPosition()); - // compute the size of the voided data based on the original one - SetSize(EltToVoid.GetSize() + EltToVoid.HeadSize() - 1); // 1 for the ID - SetSize(GetSize() - CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize())); - // make sure we handle even the strange cases - //uint32 A1 = GetSize() + HeadSize(); - //uint32 A2 = EltToVoid.GetSize() + EltToVoid.HeadSize(); - if (GetSize() + HeadSize() != EltToVoid.GetSize() + EltToVoid.HeadSize()) { - SetSize(GetSize()-1); - SetSizeLength(CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()) + 1); - } + // compute the size of the voided data based on the original one + SetSize(EltToVoid.GetSize() + EltToVoid.HeadSize() - 1); // 1 for the ID + SetSize(GetSize() - CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize())); + // make sure we handle even the strange cases + //uint32 A1 = GetSize() + HeadSize(); + //uint32 A2 = EltToVoid.GetSize() + EltToVoid.HeadSize(); + if (GetSize() + HeadSize() != EltToVoid.GetSize() + EltToVoid.HeadSize()) { + SetSize(GetSize()-1); + SetSizeLength(CodedSizeLength(GetSize(), GetSizeLength(), IsFiniteSize()) + 1); + } - if (GetSize() != 0) { - RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten - } + if (GetSize() != 0) { + RenderHead(output, false, bWithDefault); // the rest of the data is not rewritten + } - if (ComeBackAfterward) { - output.setFilePointer(CurrentPosition); - } + if (ComeBackAfterward) { + output.setFilePointer(CurrentPosition); + } - return EltToVoid.GetSize() + EltToVoid.HeadSize(); + return EltToVoid.GetSize() + EltToVoid.HeadSize(); } END_LIBEBML_NAMESPACE diff --git a/src/IOCallback.cpp b/src/IOCallback.cpp index 77c5871..a5570be 100644 --- a/src/IOCallback.cpp +++ b/src/IOCallback.cpp @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,10 +27,10 @@ **********************************************************************/ /*! - \file - \version \$Id: IOCallback.cpp 639 2004-07-09 20:59:14Z mosu $ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id: IOCallback.cpp 639 2004-07-09 20:59:14Z mosu $ + \author Steve Lhomme + \author Moritz Bunkus */ #if !defined(__GNUC__) || (__GNUC__ > 2) @@ -47,37 +47,37 @@ START_LIBEBML_NAMESPACE void IOCallback::writeFully(const void*Buffer,size_t Size) { - if (Size == 0) - return; + if (Size == 0) + return; - if (Buffer == NULL) - throw; + if (Buffer == NULL) + throw; - if(write(Buffer,Size) != Size) - { + if(write(Buffer,Size) != Size) + { #if !defined(__GNUC__) || (__GNUC__ > 2) - stringstream Msg; - Msg<<"EOF in writeFully("< 2) - stringstream Msg; - Msg<<"EOF in readFully("< + \file + \version \$Id: MemIOCallback.cpp 693 2004-07-31 08:56:28Z robux4 $ + \author Jory Stone */ #include "ebml/MemIOCallback.h" @@ -40,85 +40,85 @@ START_LIBEBML_NAMESPACE MemIOCallback::MemIOCallback(uint64 DefaultSize) { - //The default size of the buffer is 128 bytes - dataBuffer = (binary *)malloc(DefaultSize); - if (dataBuffer == NULL) { - mOk = false; - std::stringstream Msg; - Msg << "Failed to alloc memory block of size "; -// not working with VC6 Msg << DefaultSize; - mLastErrorStr = Msg.str(); - return; - } - - dataBufferMemorySize = DefaultSize; - dataBufferPos = 0; - dataBufferTotalSize = 0; - mOk = true; + //The default size of the buffer is 128 bytes + dataBuffer = (binary *)malloc(DefaultSize); + if (dataBuffer == NULL) { + mOk = false; + std::stringstream Msg; + Msg << "Failed to alloc memory block of size "; +// not working with VC6 Msg << DefaultSize; + mLastErrorStr = Msg.str(); + return; + } + + dataBufferMemorySize = DefaultSize; + dataBufferPos = 0; + dataBufferTotalSize = 0; + mOk = true; } MemIOCallback::~MemIOCallback() { - if (dataBuffer != NULL) - free(dataBuffer); + if (dataBuffer != NULL) + free(dataBuffer); } uint32 MemIOCallback::read(void *Buffer, size_t Size) { - if (Buffer == NULL || Size < 1) - return 0; - //If the size is larger than than the amount left in the buffer - if (Size + dataBufferPos > dataBufferTotalSize) - { - //We will only return the remaining data - memcpy(Buffer, dataBuffer + dataBufferPos, dataBufferTotalSize - dataBufferPos); + if (Buffer == NULL || Size < 1) + return 0; + //If the size is larger than than the amount left in the buffer + if (Size + dataBufferPos > dataBufferTotalSize) + { + //We will only return the remaining data + memcpy(Buffer, dataBuffer + dataBufferPos, dataBufferTotalSize - dataBufferPos); uint64 oldDataPos = dataBufferPos; - dataBufferPos = dataBufferTotalSize; - return dataBufferTotalSize - oldDataPos; - } - - //Well... We made it here, so do a quick and simple copy - memcpy(Buffer, dataBuffer+dataBufferPos, Size); - dataBufferPos += Size; + dataBufferPos = dataBufferTotalSize; + return dataBufferTotalSize - oldDataPos; + } - return Size; + //Well... We made it here, so do a quick and simple copy + memcpy(Buffer, dataBuffer+dataBufferPos, Size); + dataBufferPos += Size; + + return Size; } void MemIOCallback::setFilePointer(int64 Offset, seek_mode Mode) { - if (Mode == seek_beginning) - dataBufferPos = Offset; - else if (Mode == seek_current) - dataBufferPos = dataBufferPos + Offset; - else if (Mode == seek_end) - dataBufferPos = dataBufferTotalSize + Offset; + if (Mode == seek_beginning) + dataBufferPos = Offset; + else if (Mode == seek_current) + dataBufferPos = dataBufferPos + Offset; + else if (Mode == seek_end) + dataBufferPos = dataBufferTotalSize + Offset; } size_t MemIOCallback::write(const void *Buffer, size_t Size) { - if (dataBufferMemorySize < dataBufferPos + Size) - { - //We need more memory! - dataBuffer = (binary *)realloc((void *)dataBuffer, dataBufferPos + Size); - } - memcpy(dataBuffer+dataBufferPos, Buffer, Size); - dataBufferPos += Size; - if (dataBufferPos > dataBufferTotalSize) - dataBufferTotalSize = dataBufferPos; + if (dataBufferMemorySize < dataBufferPos + Size) + { + //We need more memory! + dataBuffer = (binary *)realloc((void *)dataBuffer, dataBufferPos + Size); + } + memcpy(dataBuffer+dataBufferPos, Buffer, Size); + dataBufferPos += Size; + if (dataBufferPos > dataBufferTotalSize) + dataBufferTotalSize = dataBufferPos; - return Size; + return Size; } uint32 MemIOCallback::write(IOCallback & IOToRead, size_t Size) { - if (dataBufferMemorySize < dataBufferPos + Size) - { - //We need more memory! - dataBuffer = (binary *)realloc((void *)dataBuffer, dataBufferPos + Size); - } - IOToRead.readFully(&dataBuffer[dataBufferPos], Size); - dataBufferTotalSize = Size; - return Size; + if (dataBufferMemorySize < dataBufferPos + Size) + { + //We need more memory! + dataBuffer = (binary *)realloc((void *)dataBuffer, dataBufferPos + Size); + } + IOToRead.readFully(&dataBuffer[dataBufferPos], Size); + dataBufferTotalSize = Size; + return Size; } END_LIBEBML_NAMESPACE diff --git a/src/StdIOCallback.cpp b/src/StdIOCallback.cpp index 139f627..6f92e2d 100644 --- a/src/StdIOCallback.cpp +++ b/src/StdIOCallback.cpp @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -27,10 +27,10 @@ **********************************************************************/ /*! - \file - \version \$Id: StdIOCallback.cpp 1298 2008-02-21 22:14:18Z mosu $ - \author Steve Lhomme - \author Moritz Bunkus + \file + \version \$Id: StdIOCallback.cpp 1298 2008-02-21 22:14:18Z mosu $ + \author Steve Lhomme + \author Moritz Bunkus */ #include @@ -48,154 +48,154 @@ using namespace std; START_LIBEBML_NAMESPACE CRTError::CRTError(int nError, const std::string & Description) - :std::runtime_error(Description+": "+strerror(nError)) - ,Error(nError) + :std::runtime_error(Description+": "+strerror(nError)) + ,Error(nError) { } CRTError::CRTError(const std::string & Description,int nError) - :std::runtime_error(Description+": "+strerror(nError)) - ,Error(nError) + :std::runtime_error(Description+": "+strerror(nError)) + ,Error(nError) { } StdIOCallback::StdIOCallback(const char*Path, const open_mode aMode) { - assert(Path!=0); + assert(Path!=0); - const char *Mode; - switch (aMode) - { - case MODE_READ: - Mode = "rb"; - break; - case MODE_SAFE: - Mode = "rb+"; - break; - case MODE_WRITE: - Mode = "wb"; - break; - case MODE_CREATE: - Mode = "wb+"; - break; - default: - throw 0; - } + const char *Mode; + switch (aMode) + { + case MODE_READ: + Mode = "rb"; + break; + case MODE_SAFE: + Mode = "rb+"; + break; + case MODE_WRITE: + Mode = "wb"; + break; + case MODE_CREATE: + Mode = "wb+"; + break; + default: + throw 0; + } - File=fopen(Path,Mode); - if(File==0) - { + File=fopen(Path,Mode); + if(File==0) + { #if !defined(__GNUC__) || (__GNUC__ > 2) - stringstream Msg; - Msg<<"Can't open stdio file \""<::max()); - assert(Offset >= numeric_limits::min()); + // There is a numeric cast in the boost library, which would be quite nice for this checking +/* + SL : replaced because unknown class in cygwin + assert(Offset <= numeric_limits::max()); + assert(Offset >= numeric_limits::min()); */ - assert(Offset <= LONG_MAX); - assert(Offset >= LONG_MIN); + assert(Offset <= LONG_MAX); + assert(Offset >= LONG_MIN); - assert(Mode==SEEK_CUR||Mode==SEEK_END||Mode==SEEK_SET); + assert(Mode==SEEK_CUR||Mode==SEEK_END||Mode==SEEK_SET); - if(fseek(File,Offset,Mode)!=0) - { + if(fseek(File,Offset,Mode)!=0) + { #if !defined(__GNUC__) || (__GNUC__ > 2) - ostringstream Msg; - Msg<<"Failed to seek file "< 2) - stringstream Msg; - Msg<<"Can't tell the current file pointer position for "< 2) - stringstream Msg; - Msg<<"Can't close file "< - \author Jory Stone - \author Cyrius + \file + \version \$Id: WinIOCallback.cpp 1092 2005-03-16 13:01:15Z robux4 $ + \author Steve Lhomme + \author Jory Stone + \author Cyrius */ #include @@ -47,238 +47,238 @@ START_LIBEBML_NAMESPACE WinIOCallback::WinIOCallback(const char* Path, const open_mode aMode, DWORD dwFlags) - :mFile(NULL), mOk(false) + :mFile(NULL), mOk(false) { - mOk = open(Path, aMode, dwFlags); + mOk = open(Path, aMode, dwFlags); } WinIOCallback::WinIOCallback(const wchar_t* Path, const open_mode aMode, DWORD dwFlags) - :mFile(NULL), mOk(false) + :mFile(NULL), mOk(false) { - mOk = open(Path, aMode, dwFlags); + mOk = open(Path, aMode, dwFlags); } WinIOCallback::~WinIOCallback() { - close(); + close(); } -bool WinIOCallback::open(const char* Path, const open_mode aMode, DWORD dwFlags) +bool WinIOCallback::open(const char* Path, const open_mode aMode, DWORD dwFlags) { - assert(Path!=0); + assert(Path!=0); - DWORD AccessMode, ShareMode, Disposition; + DWORD AccessMode, ShareMode, Disposition; - switch (aMode) - { - case MODE_READ: - AccessMode = GENERIC_READ; - ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - Disposition = OPEN_EXISTING; - break; - case MODE_WRITE: - AccessMode = GENERIC_WRITE; - ShareMode = 0; - Disposition = OPEN_ALWAYS; - break; - case MODE_SAFE: - AccessMode = GENERIC_WRITE|GENERIC_READ; - ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - Disposition = OPEN_ALWAYS; - break; - case MODE_CREATE: - AccessMode = GENERIC_WRITE; - ShareMode = 0; - Disposition = CREATE_ALWAYS; - break; - default: - assert(false); - } + switch (aMode) + { + case MODE_READ: + AccessMode = GENERIC_READ; + ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + Disposition = OPEN_EXISTING; + break; + case MODE_WRITE: + AccessMode = GENERIC_WRITE; + ShareMode = 0; + Disposition = OPEN_ALWAYS; + break; + case MODE_SAFE: + AccessMode = GENERIC_WRITE|GENERIC_READ; + ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + Disposition = OPEN_ALWAYS; + break; + case MODE_CREATE: + AccessMode = GENERIC_WRITE; + ShareMode = 0; + Disposition = CREATE_ALWAYS; + break; + default: + assert(false); + } - mFile = CreateFileA(Path, AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); - if ((mFile == INVALID_HANDLE_VALUE) || ((long)mFile == 0xffffffff)) - { - //File was not opened - char err_msg[256]; - DWORD error_code = GetLastError(); - // An error message about the file already existing is not really an error message :P - if (error_code != ERROR_ALREADY_EXISTS) { - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, error_code, 0, err_msg, 255, NULL); - EBML_TRACE("Failed to open file \"%hs\" in mode %d.", Path, aMode); + mFile = CreateFileA(Path, AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); + if ((mFile == INVALID_HANDLE_VALUE) || ((long)mFile == 0xffffffff)) + { + //File was not opened + char err_msg[256]; + DWORD error_code = GetLastError(); + // An error message about the file already existing is not really an error message :P + if (error_code != ERROR_ALREADY_EXISTS) { + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, error_code, 0, err_msg, 255, NULL); + EBML_TRACE("Failed to open file \"%hs\" in mode %d.", Path, aMode); - mLastErrorStr = err_msg; - return mOk = false; - } - } - mCurrentPosition = 0; + mLastErrorStr = err_msg; + return mOk = false; + } + } + mCurrentPosition = 0; - EBML_TRACE("Successfully opened file \"%hs\" in mode %d. The handle is %p\n", Path, aMode, mFile); + EBML_TRACE("Successfully opened file \"%hs\" in mode %d. The handle is %p\n", Path, aMode, mFile); - return mOk = true; + return mOk = true; }; -bool WinIOCallback::open(const wchar_t* Path, const open_mode aMode, DWORD dwFlags) +bool WinIOCallback::open(const wchar_t* Path, const open_mode aMode, DWORD dwFlags) { - assert(Path!=0); + assert(Path!=0); - DWORD AccessMode, ShareMode, Disposition; + DWORD AccessMode, ShareMode, Disposition; - switch (aMode) - { - case MODE_READ: - AccessMode = GENERIC_READ; - ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - Disposition = OPEN_EXISTING; - break; - case MODE_WRITE: - AccessMode = GENERIC_WRITE; - ShareMode = 0; - Disposition = OPEN_ALWAYS; - break; - case MODE_SAFE: - AccessMode = GENERIC_WRITE|GENERIC_READ; - ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - Disposition = OPEN_ALWAYS; - break; - case MODE_CREATE: - AccessMode = GENERIC_WRITE; - ShareMode = 0; - Disposition = CREATE_ALWAYS; - break; - default: - assert(false); - } + switch (aMode) + { + case MODE_READ: + AccessMode = GENERIC_READ; + ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + Disposition = OPEN_EXISTING; + break; + case MODE_WRITE: + AccessMode = GENERIC_WRITE; + ShareMode = 0; + Disposition = OPEN_ALWAYS; + break; + case MODE_SAFE: + AccessMode = GENERIC_WRITE|GENERIC_READ; + ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + Disposition = OPEN_ALWAYS; + break; + case MODE_CREATE: + AccessMode = GENERIC_WRITE; + ShareMode = 0; + Disposition = CREATE_ALWAYS; + break; + default: + assert(false); + } - if ((LONG)GetVersion() >= 0) { - mFile = CreateFileW(Path, AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); - } else { - int errCode; - int pathSize = wcslen(Path); - unsigned int bufferSize = pathSize + sizeof(wchar_t) * 2; - std::string PathA; - PathA.resize(bufferSize); - errCode = WideCharToMultiByte(CP_ACP, 0, Path, pathSize, (char *)PathA.c_str(), bufferSize, NULL, NULL); - if (errCode == 0) - errCode = GetLastError(); -#ifdef _DEBUG - if (errCode == ERROR_INSUFFICIENT_BUFFER) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INSUFFICIENT_BUFFER")); - if (errCode == ERROR_INVALID_FLAGS) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INVALID_FLAGS")); - if (errCode == ERROR_INVALID_PARAMETER) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INVALID_PARAMETER")); + if ((LONG)GetVersion() >= 0) { + mFile = CreateFileW(Path, AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); + } else { + int errCode; + int pathSize = wcslen(Path); + unsigned int bufferSize = pathSize + sizeof(wchar_t) * 2; + std::string PathA; + PathA.resize(bufferSize); + errCode = WideCharToMultiByte(CP_ACP, 0, Path, pathSize, (char *)PathA.c_str(), bufferSize, NULL, NULL); + if (errCode == 0) + errCode = GetLastError(); +#ifdef _DEBUG + if (errCode == ERROR_INSUFFICIENT_BUFFER) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INSUFFICIENT_BUFFER")); + if (errCode == ERROR_INVALID_FLAGS) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INVALID_FLAGS")); + if (errCode == ERROR_INVALID_PARAMETER) OutputDebugString(TEXT("WinIOCallback::WideCharToMultiByte::ERROR_INVALID_PARAMETER")); #endif - while (errCode == ERROR_INSUFFICIENT_BUFFER) { - // Increase the buffer size - bufferSize += MAX_PATH; - PathA.resize(bufferSize); - errCode = WideCharToMultiByte(CP_ACP, WC_SEPCHARS, Path, pathSize, (char *)PathA.c_str(), bufferSize, NULL, NULL); - if (errCode == 0) - errCode = GetLastError(); - } - if (errCode != 0) { - mFile = CreateFileA(PathA.c_str(), AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); - } else { - mLastErrorStr = "Couldn't convert Unicode filename to ANSI."; - return mOk = false; - } - } - if ((mFile == INVALID_HANDLE_VALUE) || ((long)mFile == 0xffffffff)) - { - //File was not opened - char err_msg[256]; - DWORD error_code = GetLastError(); - // An error message about the file already existing is not really an error message :P - if (error_code != ERROR_ALREADY_EXISTS) { - FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, error_code, 0, err_msg, 255, NULL); - EBML_TRACE("Failed to open file \"%S\" in mode %d.", Path, aMode); - mLastErrorStr = err_msg; - return mOk = false; - } - } - mCurrentPosition = 0; + while (errCode == ERROR_INSUFFICIENT_BUFFER) { + // Increase the buffer size + bufferSize += MAX_PATH; + PathA.resize(bufferSize); + errCode = WideCharToMultiByte(CP_ACP, WC_SEPCHARS, Path, pathSize, (char *)PathA.c_str(), bufferSize, NULL, NULL); + if (errCode == 0) + errCode = GetLastError(); + } + if (errCode != 0) { + mFile = CreateFileA(PathA.c_str(), AccessMode, ShareMode, NULL, Disposition, dwFlags, NULL); + } else { + mLastErrorStr = "Couldn't convert Unicode filename to ANSI."; + return mOk = false; + } + } + if ((mFile == INVALID_HANDLE_VALUE) || ((long)mFile == 0xffffffff)) + { + //File was not opened + char err_msg[256]; + DWORD error_code = GetLastError(); + // An error message about the file already existing is not really an error message :P + if (error_code != ERROR_ALREADY_EXISTS) { + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, 0, error_code, 0, err_msg, 255, NULL); + EBML_TRACE("Failed to open file \"%S\" in mode %d.", Path, aMode); + mLastErrorStr = err_msg; + return mOk = false; + } + } + mCurrentPosition = 0; - EBML_TRACE("Successfully opened file \"%S\" in mode %d. The handle is %p\n", Path, aMode, mFile); - return mOk = true; + EBML_TRACE("Successfully opened file \"%S\" in mode %d. The handle is %p\n", Path, aMode, mFile); + return mOk = true; } void WinIOCallback::close() { - if (mFile) { - CloseHandle(mFile); - mFile = NULL; - } + if (mFile) { + CloseHandle(mFile); + mFile = NULL; + } } uint64 WinIOCallback::getFilePointer() { - if (!mFile) { - return 0; - } - - return mCurrentPosition; + if (!mFile) { + return 0; + } + + return mCurrentPosition; #if 0 - LONG High = 0; - DWORD Low = SetFilePointer(mFile, 0, &High, FILE_CURRENT); - if ( (Low==INVALID_SET_FILE_POINTER) && (GetLastError()!=NO_ERROR) ) - return static_cast(-1); - return ((uint64(High)<<32) | Low); + LONG High = 0; + DWORD Low = SetFilePointer(mFile, 0, &High, FILE_CURRENT); + if ( (Low==INVALID_SET_FILE_POINTER) && (GetLastError()!=NO_ERROR) ) + return static_cast(-1); + return ((uint64(High)<<32) | Low); #endif } void WinIOCallback::setFilePointer(int64 Offset, seek_mode Mode) { - DWORD Method; - switch(Mode) - { - case seek_beginning: - Method=FILE_BEGIN; - break; - case seek_current: - Method=FILE_CURRENT; - break; - case seek_end: - Method=FILE_END; - break; - default: - assert(false); - break; - } + DWORD Method; + switch(Mode) + { + case seek_beginning: + Method=FILE_BEGIN; + break; + case seek_current: + Method=FILE_CURRENT; + break; + case seek_end: + Method=FILE_END; + break; + default: + assert(false); + break; + } - LONG High = LONG(Offset>>32); - mCurrentPosition = SetFilePointer(mFile, LONG(Offset & 0xffffffff), &High, Method); - if ( mCurrentPosition == INVALID_SET_FILE_POINTER ) - { - High = 0; - DWORD Low = SetFilePointer(mFile, 0, &High, FILE_CURRENT); - mCurrentPosition = ((uint64(High)<<32) | Low); - } - else - { - mCurrentPosition |= uint64(High)<<32; - } + LONG High = LONG(Offset>>32); + mCurrentPosition = SetFilePointer(mFile, LONG(Offset & 0xffffffff), &High, Method); + if ( mCurrentPosition == INVALID_SET_FILE_POINTER ) + { + High = 0; + DWORD Low = SetFilePointer(mFile, 0, &High, FILE_CURRENT); + mCurrentPosition = ((uint64(High)<<32) | Low); + } + else + { + mCurrentPosition |= uint64(High)<<32; + } } uint32 WinIOCallback::read(void*Buffer,size_t Size) { - DWORD BytesRead; - if (!ReadFile(mFile, Buffer, Size, &BytesRead, NULL)) { - return 0; - } - mCurrentPosition += BytesRead; - return BytesRead; + DWORD BytesRead; + if (!ReadFile(mFile, Buffer, Size, &BytesRead, NULL)) { + return 0; + } + mCurrentPosition += BytesRead; + return BytesRead; } size_t WinIOCallback::write(const void*Buffer,size_t Size) { - DWORD BytesWriten; - if (!WriteFile(mFile, Buffer, Size, &BytesWriten, NULL)) { - return 0; - } - mCurrentPosition += BytesWriten; - return BytesWriten; + DWORD BytesWriten; + if (!WriteFile(mFile, Buffer, Size, &BytesWriten, NULL)) { + return 0; + } + mCurrentPosition += BytesWriten; + return BytesWriten; } bool WinIOCallback::SetEOF() { - return SetEndOfFile(mFile) != 0; + return SetEndOfFile(mFile) != 0; } END_LIBEBML_NAMESPACE diff --git a/src/platform/win32/WinIOCallback.h b/src/platform/win32/WinIOCallback.h index 1a37fc6..f8ade13 100644 --- a/src/platform/win32/WinIOCallback.h +++ b/src/platform/win32/WinIOCallback.h @@ -9,12 +9,12 @@ ** modify it under the terms of the GNU Lesser General Public ** License as published by the Free Software Foundation; either ** version 2.1 of the License, or (at your option) any later version. -** +** ** This library 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 ** Lesser General Public License for more details. -** +** ** You should have received a copy of the GNU Lesser General Public ** License along with this library; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA @@ -26,11 +26,11 @@ ** **********************************************************************/ /*! - \file - \version \$Id: WinIOCallback.h 1090 2005-03-16 12:47:59Z robux4 $ - \author Steve Lhomme - \author Jory Stone - \author Cyrius + \file + \version \$Id: WinIOCallback.h 1090 2005-03-16 12:47:59Z robux4 $ + \author Steve Lhomme + \author Jory Stone + \author Cyrius */ #ifndef LIBEBML_WINIOCALLBACK_H @@ -44,30 +44,30 @@ START_LIBEBML_NAMESPACE class WinIOCallback: public IOCallback -{ +{ public: - WinIOCallback(const wchar_t* Path, const open_mode aMode, DWORD dwFlags=0); - WinIOCallback(const char* Path, const open_mode aMode, DWORD dwFlags=0); - virtual ~WinIOCallback(); + WinIOCallback(const wchar_t* Path, const open_mode aMode, DWORD dwFlags=0); + WinIOCallback(const char* Path, const open_mode aMode, DWORD dwFlags=0); + virtual ~WinIOCallback(); - bool open(const wchar_t* Path, const open_mode Mode, DWORD dwFlags=0); - bool open(const char* Path, const open_mode Mode, DWORD dwFlags=0); + bool open(const wchar_t* Path, const open_mode Mode, DWORD dwFlags=0); + bool open(const char* Path, const open_mode Mode, DWORD dwFlags=0); - virtual uint32 read(void*Buffer,size_t Size); - virtual size_t write(const void*Buffer,size_t Size); - virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning); - virtual uint64 getFilePointer(); - virtual void close(); - - bool IsOk() { return mOk; }; - const std::string &GetLastErrorStr() { return mLastErrorStr; }; - bool SetEOF(); + virtual uint32 read(void*Buffer,size_t Size); + virtual size_t write(const void*Buffer,size_t Size); + virtual void setFilePointer(int64 Offset,seek_mode Mode=seek_beginning); + virtual uint64 getFilePointer(); + virtual void close(); + + bool IsOk() { return mOk; }; + const std::string &GetLastErrorStr() { return mLastErrorStr; }; + bool SetEOF(); protected: - bool mOk; - std::string mLastErrorStr; - uint64 mCurrentPosition; + bool mOk; + std::string mLastErrorStr; + uint64 mCurrentPosition; - HANDLE mFile; + HANDLE mFile; }; END_LIBEBML_NAMESPACE