00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00038 #ifndef LIBEBML_SINTEGER_H
00039 #define LIBEBML_SINTEGER_H
00040
00041 #include <cassert>
00042
00043 #include "EbmlTypes.h"
00044 #include "EbmlElement.h"
00045
00046 START_LIBEBML_NAMESPACE
00047
00048 const int DEFAULT_INT_SIZE = 1;
00049
00054 class EBML_DLL_API EbmlSInteger : public EbmlElement {
00055 public:
00056 EbmlSInteger();
00057 EbmlSInteger(int64 DefaultValue);
00058 EbmlSInteger(const EbmlSInteger & ElementToClone);
00059
00060 EbmlSInteger & operator = (int64 NewValue) {Value = NewValue; SetValueIsSet(); return *this;}
00061
00065 virtual void SetDefaultSize(uint64 nDefaultSize = DEFAULT_INT_SIZE) {EbmlElement::SetDefaultSize(nDefaultSize); SetSize_(nDefaultSize);}
00066
00067 virtual bool ValidateSize() const {return IsFiniteSize() && (GetSize() <= 8);}
00068 filepos_t RenderData(IOCallback & output, bool bForceRender, bool bWithDefault = false);
00069 filepos_t ReadData(IOCallback & input, ScopeMode ReadFully = SCOPE_ALL_DATA);
00070 filepos_t UpdateSize(bool bWithDefault = false, bool bForceRender = false);
00071
00072 virtual bool IsSmallerThan(const EbmlElement *Cmp) const;
00073
00074 operator int8() {return int8(Value);}
00075 operator int16() {return int16(Value);}
00076 operator int32() {return int32(Value);}
00077 operator int64() {return Value;}
00078
00079 void SetDefaultValue(int64 aValue) {assert(!DefaultISset()); DefaultValue = aValue; SetDefaultIsSet();}
00080
00081 int64 DefaultVal() const {assert(DefaultISset()); return DefaultValue;}
00082
00083 bool IsDefaultValue() const {
00084 return (DefaultISset() && Value == DefaultValue);
00085 }
00086
00087 #if defined(EBML_STRICT_API)
00088 private:
00089 #else
00090 protected:
00091 #endif
00092 int64 Value;
00093 int64 DefaultValue;
00094 };
00095
00096 END_LIBEBML_NAMESPACE
00097
00098 #endif // LIBEBML_SINTEGER_H