GCS  0.2.3
gu_uuid.h
1 /*
2  * Copyright (C) 2008 Codership Oy <info@codership.com>
3  *
4  * $Id: gu_uuid.h 3056 2013-04-19 20:31:05Z alex $
5  */
6 /*
7  * Universally Unique IDentifier. RFC 4122.
8  * Time-based implementation.
9  *
10  */
11 
12 #ifndef _gu_uuid_h_
13 #define _gu_uuid_h_
14 
15 #include "gu_types.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
23 #define GU_UUID_LEN 16
24 typedef struct {
25  uint8_t data[GU_UUID_LEN];
26 } gu_uuid_t;
27 
28 extern const gu_uuid_t GU_UUID_NIL;
29 
31 #define GU_UUID_STR_LEN 36
32 
34 #define GU_UUID_FORMAT \
35 "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
36 
37 #define GU_UUID_ARGS(uuid) \
38 (uuid)->data[ 0], (uuid)->data[ 1], (uuid)->data[ 2], (uuid)->data[ 3],\
39 (uuid)->data[ 4], (uuid)->data[ 5], (uuid)->data[ 6], (uuid)->data[ 7],\
40 (uuid)->data[ 8], (uuid)->data[ 9], (uuid)->data[10], (uuid)->data[11],\
41 (uuid)->data[12], (uuid)->data[13], (uuid)->data[14], (uuid)->data[15]
42 
43 /* this is used for scanf, variables are by reference */
44 #define GU_UUID_FORMAT_SCANF \
45 "%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
46 
47 #define GU_UUID_ARGS_SCANF(uuid) \
48 &(uuid)->data[ 0], &(uuid)->data[ 1], &(uuid)->data[ 2], &(uuid)->data[ 3],\
49 &(uuid)->data[ 4], &(uuid)->data[ 5], &(uuid)->data[ 6], &(uuid)->data[ 7],\
50 &(uuid)->data[ 8], &(uuid)->data[ 9], &(uuid)->data[10], &(uuid)->data[11],\
51 &(uuid)->data[12], &(uuid)->data[13], &(uuid)->data[14], &(uuid)->data[15]
52 
64 extern void
65 gu_uuid_generate (gu_uuid_t* uuid,
66  const void* node,
67  size_t node_len);
68 
73 extern long
74 gu_uuid_compare (const gu_uuid_t* left,
75  const gu_uuid_t* right);
76 
81 extern long
82 gu_uuid_older (const gu_uuid_t* left,
83  const gu_uuid_t* right);
84 
89 extern ssize_t
90 gu_uuid_print(const gu_uuid_t* uuid, char* buf, size_t buflen);
91 
96 extern ssize_t
97 gu_uuid_scan(const char* buf, size_t buflen, gu_uuid_t* uuid);
98 
99 #ifdef __cplusplus
100 }
101 #endif /* __cplusplus */
102 
103 #endif /* _gu_uuid_h_ */
Definition: gu_uuid.h:24