00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _guid_h
00018 #define _guid_h
00019
00020 #include <spl/types.h>
00021 #include <spl/Debug.h>
00022 #include <spl/collection/Array.h>
00023 #include <spl/RefCountPtr.h>
00024 #include <spl/String.h>
00025
00032 #define GUID_SIZE_BYTES 16
00033
00038 class Guid
00039 {
00040 protected:
00041 uint32 data1;
00042 uint16 data2;
00043 uint16 data3;
00044 uint64 data4;
00045
00046 public:
00047 Guid();
00048 Guid( const Array<byte>& bytes );
00049 Guid( const Guid& guid );
00050 ~Guid();
00051
00052 inline static int Length() { return GUID_SIZE_BYTES; }
00053
00054 void GetBytes( Array<byte>& bytes ) const;
00055 Array<byte> GetBytes() const;
00056 StringPtr ToBase64();
00057 StringPtr ToHex();
00058
00059 inline bool Equals( const Guid& g ) { return data1 == g.data1 && data2 == g.data2 && data3 == g.data3 && data4 == g.data4; }
00060
00061 static Guid ParseBase64(const String& str);
00062 static Guid ParseHex(const String& str);
00063 };
00064
00065 inline void ValidateType( const Guid& guid )
00066 {
00067 }
00068
00069 inline void ValidateType ( Guid *guid )
00070 {
00071 DEBUG_NOTE_MEM(guid);
00072 ASSERT_MEM(guid, sizeof(Guid));
00073 }
00074
00075 REGISTER_TYPEOF( 564, Guid );
00076
00079 #endif