diff options
Diffstat (limited to 'src/unstable/uuid.cpp')
-rw-r--r-- | src/unstable/uuid.cpp | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/src/unstable/uuid.cpp b/src/unstable/uuid.cpp index aef8bc0..5400f8f 100644 --- a/src/unstable/uuid.cpp +++ b/src/unstable/uuid.cpp | |||
@@ -18,25 +18,25 @@ | |||
18 | 18 | ||
19 | Bu::Uuid::Uuid() | 19 | Bu::Uuid::Uuid() |
20 | { | 20 | { |
21 | clear(); | 21 | clear(); |
22 | } | 22 | } |
23 | 23 | ||
24 | Bu::Uuid::Uuid( const Uuid &src ) | 24 | Bu::Uuid::Uuid( const Uuid &src ) |
25 | { | 25 | { |
26 | memcpy( data, src.data, 16 ); | 26 | memcpy( data, src.data, 16 ); |
27 | } | 27 | } |
28 | 28 | ||
29 | Bu::Uuid::Uuid( const Bu::String &sSrc ) | 29 | Bu::Uuid::Uuid( const Bu::String &sSrc ) |
30 | { | 30 | { |
31 | if( sSrc.getSize() == 16 ) | 31 | if( sSrc.getSize() == 16 ) |
32 | { | 32 | { |
33 | memcpy( data, sSrc.getStr(), 16 ); | 33 | memcpy( data, sSrc.getStr(), 16 ); |
34 | } | 34 | } |
35 | else if( sSrc.getSize() == 36 ) | 35 | else if( sSrc.getSize() == 36 ) |
36 | { | 36 | { |
37 | // Parse it | 37 | // Parse it |
38 | set( sSrc ); | 38 | set( sSrc ); |
39 | } | 39 | } |
40 | } | 40 | } |
41 | 41 | ||
42 | Bu::Uuid::~Uuid() | 42 | Bu::Uuid::~Uuid() |
@@ -45,130 +45,130 @@ Bu::Uuid::~Uuid() | |||
45 | 45 | ||
46 | Bu::String Bu::Uuid::toRawString() const | 46 | Bu::String Bu::Uuid::toRawString() const |
47 | { | 47 | { |
48 | return Bu::String( (char *)data, 16 ); | 48 | return Bu::String( (char *)data, 16 ); |
49 | } | 49 | } |
50 | 50 | ||
51 | Bu::String Bu::Uuid::toString() const | 51 | Bu::String Bu::Uuid::toString() const |
52 | { | 52 | { |
53 | Bu::MemBuf mb; | 53 | Bu::MemBuf mb; |
54 | Bu::Formatter f( mb ); | 54 | Bu::Formatter f( mb ); |
55 | 55 | ||
56 | for( int j = 0; j < 16; j++ ) | 56 | for( int j = 0; j < 16; j++ ) |
57 | { | 57 | { |
58 | if( j == 4 || j == 6 || j == 8 || j == 10 ) | 58 | if( j == 4 || j == 6 || j == 8 || j == 10 ) |
59 | f << '-'; | 59 | f << '-'; |
60 | f << Bu::Fmt::hex(2).caps(false) << (unsigned int)data[j]; | 60 | f << Bu::Fmt::hex(2).caps(false) << (unsigned int)data[j]; |
61 | } | 61 | } |
62 | 62 | ||
63 | return mb.getString(); | 63 | return mb.getString(); |
64 | } | 64 | } |
65 | 65 | ||
66 | Bu::String Bu::Uuid::toUrn() const | 66 | Bu::String Bu::Uuid::toUrn() const |
67 | { | 67 | { |
68 | return "urn:uuid:" + toString(); | 68 | return "urn:uuid:" + toString(); |
69 | } | 69 | } |
70 | 70 | ||
71 | int Bu::Uuid::getVersion() | 71 | int Bu::Uuid::getVersion() |
72 | { | 72 | { |
73 | return (data[6]&((8|4|2|1)<<4))>>4; | 73 | return (data[6]&((8|4|2|1)<<4))>>4; |
74 | } | 74 | } |
75 | 75 | ||
76 | #define msb( i ) (1<<(7-i)) | 76 | #define msb( i ) (1<<(7-i)) |
77 | 77 | ||
78 | void Bu::Uuid::clear() | 78 | void Bu::Uuid::clear() |
79 | { | 79 | { |
80 | data[7] = msb(0); | 80 | data[7] = msb(0); |
81 | } | 81 | } |
82 | 82 | ||
83 | Bu::Uuid Bu::Uuid::generate( Bu::Uuid::Type eType ) | 83 | Bu::Uuid Bu::Uuid::generate( Bu::Uuid::Type eType ) |
84 | { | 84 | { |
85 | switch( eType ) | 85 | switch( eType ) |
86 | { | 86 | { |
87 | case Version1: | 87 | case Version1: |
88 | case Version2: | 88 | case Version2: |
89 | case Version3: | 89 | case Version3: |
90 | case Version4: | 90 | case Version4: |
91 | case Version5: | 91 | case Version5: |
92 | default: | 92 | default: |
93 | case System: | 93 | case System: |
94 | #if defined(linux) | 94 | #if defined(linux) |
95 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); | 95 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); |
96 | char dat[36]; | 96 | char dat[36]; |
97 | fIn.read( dat, 36 ); | 97 | fIn.read( dat, 36 ); |
98 | Uuid id; | 98 | Uuid id; |
99 | id.set( dat ); | 99 | id.set( dat ); |
100 | return id; | 100 | return id; |
101 | #elif defined(WIN32) | 101 | #elif defined(WIN32) |
102 | UUID uuid; | 102 | UUID uuid; |
103 | UuidCreate( &uuid ); | 103 | UuidCreate( &uuid ); |
104 | Uuid id; | 104 | Uuid id; |
105 | id.data[0] = ((unsigned char *)&uuid.Data1)[3]; | 105 | id.data[0] = ((unsigned char *)&uuid.Data1)[3]; |
106 | id.data[1] = ((unsigned char *)&uuid.Data1)[2]; | 106 | id.data[1] = ((unsigned char *)&uuid.Data1)[2]; |
107 | id.data[2] = ((unsigned char *)&uuid.Data1)[1]; | 107 | id.data[2] = ((unsigned char *)&uuid.Data1)[1]; |
108 | id.data[3] = ((unsigned char *)&uuid.Data1)[0]; | 108 | id.data[3] = ((unsigned char *)&uuid.Data1)[0]; |
109 | id.data[4] = ((unsigned char *)&uuid.Data2)[1]; | 109 | id.data[4] = ((unsigned char *)&uuid.Data2)[1]; |
110 | id.data[5] = ((unsigned char *)&uuid.Data2)[0]; | 110 | id.data[5] = ((unsigned char *)&uuid.Data2)[0]; |
111 | id.data[6] = ((unsigned char *)&uuid.Data3)[1]; | 111 | id.data[6] = ((unsigned char *)&uuid.Data3)[1]; |
112 | id.data[7] = ((unsigned char *)&uuid.Data3)[0]; | 112 | id.data[7] = ((unsigned char *)&uuid.Data3)[0]; |
113 | memcpy( id.data+8, uuid.Data4, 8 ); | 113 | memcpy( id.data+8, uuid.Data4, 8 ); |
114 | 114 | ||
115 | return id; | 115 | return id; |
116 | #else | 116 | #else |
117 | # error We should be using one of the other fallbacks, but your platform is not supported yet. Sorry. | 117 | # error We should be using one of the other fallbacks, but your platform is not supported yet. Sorry. |
118 | #endif | 118 | #endif |
119 | } | 119 | } |
120 | } | 120 | } |
121 | 121 | ||
122 | void Bu::Uuid::set( const Bu::String &sSrc ) | 122 | void Bu::Uuid::set( const Bu::String &sSrc ) |
123 | { | 123 | { |
124 | const char *dat = sSrc.getStr(); | 124 | const char *dat = sSrc.getStr(); |
125 | int iNibble = 0; | 125 | int iNibble = 0; |
126 | memset( data, 0, 16 ); | 126 | memset( data, 0, 16 ); |
127 | for( int j = 0; j < 36; j++ ) | 127 | for( int j = 0; j < 36; j++ ) |
128 | { | 128 | { |
129 | if( dat[j] == '-' ) | 129 | if( dat[j] == '-' ) |
130 | continue; | 130 | continue; |
131 | unsigned char c = (dat[j]>='0'&&dat[j]<='9')?(dat[j]-'0'):(dat[j]-'a'+10); | 131 | unsigned char c = (dat[j]>='0'&&dat[j]<='9')?(dat[j]-'0'):(dat[j]-'a'+10); |
132 | data[iNibble/2] |= (iNibble%2==0)?(c<<4):(c); | 132 | data[iNibble/2] |= (iNibble%2==0)?(c<<4):(c); |
133 | iNibble++; | 133 | iNibble++; |
134 | } | 134 | } |
135 | } | 135 | } |
136 | 136 | ||
137 | bool Bu::Uuid::operator==( const Uuid &rhs ) const | 137 | bool Bu::Uuid::operator==( const Uuid &rhs ) const |
138 | { | 138 | { |
139 | return memcmp( data, rhs.data, 16 ) == 0; | 139 | return memcmp( data, rhs.data, 16 ) == 0; |
140 | } | 140 | } |
141 | 141 | ||
142 | bool Bu::Uuid::operator!=( const Uuid &rhs ) const | 142 | bool Bu::Uuid::operator!=( const Uuid &rhs ) const |
143 | { | 143 | { |
144 | return !(*this == rhs); | 144 | return !(*this == rhs); |
145 | } | 145 | } |
146 | 146 | ||
147 | Bu::Uuid &Bu::Uuid::operator=( const Uuid &rhs ) | 147 | Bu::Uuid &Bu::Uuid::operator=( const Uuid &rhs ) |
148 | { | 148 | { |
149 | memcpy( data, rhs.data, 16 ); | 149 | memcpy( data, rhs.data, 16 ); |
150 | return *this; | 150 | return *this; |
151 | } | 151 | } |
152 | 152 | ||
153 | template<> uint32_t Bu::__calcHashCode<Bu::Uuid>( const Bu::Uuid &k ) | 153 | template<> uint32_t Bu::__calcHashCode<Bu::Uuid>( const Bu::Uuid &k ) |
154 | { | 154 | { |
155 | return __calcHashCode<String>( k.toRawString() ); | 155 | return __calcHashCode<String>( k.toRawString() ); |
156 | } | 156 | } |
157 | 157 | ||
158 | template<> bool Bu::__cmpHashKeys<Bu::Uuid>( const Bu::Uuid &a, const Bu::Uuid &b ) | 158 | template<> bool Bu::__cmpHashKeys<Bu::Uuid>( const Bu::Uuid &a, const Bu::Uuid &b ) |
159 | { | 159 | { |
160 | return a == b; | 160 | return a == b; |
161 | } | 161 | } |
162 | 162 | ||
163 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, Uuid &u ) | 163 | Bu::ArchiveBase &Bu::operator>>( Bu::ArchiveBase &ar, Uuid &u ) |
164 | { | 164 | { |
165 | ar.read( u.data, 16 ); | 165 | ar.read( u.data, 16 ); |
166 | return ar; | 166 | return ar; |
167 | } | 167 | } |
168 | 168 | ||
169 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Uuid &u ) | 169 | Bu::ArchiveBase &Bu::operator<<( Bu::ArchiveBase &ar, const Uuid &u ) |
170 | { | 170 | { |
171 | ar.write( u.data, 16 ); | 171 | ar.write( u.data, 16 ); |
172 | return ar; | 172 | return ar; |
173 | } | 173 | } |
174 | 174 | ||