diff options
Diffstat (limited to 'src/uuid.cpp')
| -rw-r--r-- | src/uuid.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/uuid.cpp b/src/uuid.cpp index d34a989..bcaf377 100644 --- a/src/uuid.cpp +++ b/src/uuid.cpp | |||
| @@ -21,16 +21,29 @@ Bu::Uuid::Uuid( const Uuid &src ) | |||
| 21 | memcpy( data, src.data, 16 ); | 21 | memcpy( data, src.data, 16 ); |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | Bu::Uuid::Uuid( const Bu::String &sSrc ) | ||
| 25 | { | ||
| 26 | if( sSrc.getSize() == 16 ) | ||
| 27 | { | ||
| 28 | memcpy( data, sSrc.getStr(), 16 ); | ||
| 29 | } | ||
| 30 | else if( sSrc.getSize() == 36 ) | ||
| 31 | { | ||
| 32 | // Parse it | ||
| 33 | set( sSrc ); | ||
| 34 | } | ||
| 35 | } | ||
| 36 | |||
| 24 | Bu::Uuid::~Uuid() | 37 | Bu::Uuid::~Uuid() |
| 25 | { | 38 | { |
| 26 | } | 39 | } |
| 27 | 40 | ||
| 28 | Bu::String Bu::Uuid::toRawString() | 41 | Bu::String Bu::Uuid::toRawString() const |
| 29 | { | 42 | { |
| 30 | return Bu::String( (char *)data, 16 ); | 43 | return Bu::String( (char *)data, 16 ); |
| 31 | } | 44 | } |
| 32 | 45 | ||
| 33 | Bu::String Bu::Uuid::toString() | 46 | Bu::String Bu::Uuid::toString() const |
| 34 | { | 47 | { |
| 35 | Bu::MemBuf mb; | 48 | Bu::MemBuf mb; |
| 36 | Bu::Formatter f( mb ); | 49 | Bu::Formatter f( mb ); |
| @@ -45,7 +58,7 @@ Bu::String Bu::Uuid::toString() | |||
| 45 | return mb.getString(); | 58 | return mb.getString(); |
| 46 | } | 59 | } |
| 47 | 60 | ||
| 48 | Bu::String Bu::Uuid::toUrn() | 61 | Bu::String Bu::Uuid::toUrn() const |
| 49 | { | 62 | { |
| 50 | return "urn:uuid:" + toString(); | 63 | return "urn:uuid:" + toString(); |
| 51 | } | 64 | } |
| @@ -67,18 +80,23 @@ Bu::Uuid Bu::Uuid::gen() | |||
| 67 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); | 80 | Bu::File fIn( "/proc/sys/kernel/random/uuid", Bu::File::Read ); |
| 68 | char dat[36]; | 81 | char dat[36]; |
| 69 | fIn.read( dat, 36 ); | 82 | fIn.read( dat, 36 ); |
| 70 | int iNibble = 0; | ||
| 71 | Uuid id; | 83 | Uuid id; |
| 72 | memset( id.data, 0, 16 ); | 84 | id.set( dat ); |
| 85 | return id; | ||
| 86 | } | ||
| 87 | |||
| 88 | void Bu::Uuid::set( const Bu::String &sSrc ) | ||
| 89 | { | ||
| 90 | const char *dat = sSrc.getStr(); | ||
| 91 | int iNibble = 0; | ||
| 92 | memset( data, 0, 16 ); | ||
| 73 | for( int j = 0; j < 36; j++ ) | 93 | for( int j = 0; j < 36; j++ ) |
| 74 | { | 94 | { |
| 75 | if( dat[j] == '-' ) | 95 | if( dat[j] == '-' ) |
| 76 | continue; | 96 | continue; |
| 77 | unsigned char c = (dat[j]>='0'&&dat[j]<='9')?(dat[j]-'0'):(dat[j]-'a'+10); | 97 | unsigned char c = (dat[j]>='0'&&dat[j]<='9')?(dat[j]-'0'):(dat[j]-'a'+10); |
| 78 | id.data[iNibble/2] |= (iNibble%2==0)?(c<<4):(c); | 98 | data[iNibble/2] |= (iNibble%2==0)?(c<<4):(c); |
| 79 | iNibble++; | 99 | iNibble++; |
| 80 | } | 100 | } |
| 81 | |||
| 82 | return id; | ||
| 83 | } | 101 | } |
| 84 | 102 | ||
