1 module nulib.system.com.uuid; 2 import numem.core.traits : getUDAs, hasUDA; 3 import nuuuid = nulib.uuid; 4 5 /** 6 UUID 7 */ 8 alias UUID = nuuuid.UUID; 9 alias uuid_t = UUID; /// ditto 10 11 /** 12 A Compile-Time Globally Unique Identifier. 13 */ 14 enum Guid(string guid) = nuuuid.CTUUID!(guid, true); 15 16 /** 17 A Globally Unique Identifier. 18 */ 19 enum Guid(uint time_low, ushort time_mid, ushort time_hi_and_version, ubyte clk0, ubyte clk1, ubyte d0, ubyte d1, ubyte d2, ubyte d3, ubyte d4, ubyte d5) = 20 nuuuid.UUID(time_low, time_mid, time_hi_and_version, clk1, clk0, d0, d1, d2, d3, d4, d5); 21 22 /** 23 Globally unique identifier. 24 */ 25 alias GUID = UUID; 26 alias LPGUID = GUID*; /// ditto 27 alias LPCGUID = const(GUID)*; /// ditto 28 alias REFGUID = const(GUID)*; /// ditto 29 30 /** 31 A null GUID 32 */ 33 enum GUID GUID_NULL = UUID(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 34 alias IID_NULL = GUID_NULL; /// ditto 35 alias CLSID_NULL = GUID_NULL; /// ditto 36 37 /** 38 Interface ID 39 */ 40 alias IID = UUID; 41 alias LPIID = IID*; /// ditto 42 alias LPCIID = const(IID)*; /// ditto 43 alias REFIID = const(IID)*; /// ditto 44 45 /** 46 Class ID 47 */ 48 alias CLSID = UUID; 49 alias LPCLSID = CLSID*; /// ditto 50 alias LPCCLSID = const(CLSID)*; /// ditto 51 alias REFCLSID = const(CLSID)*; /// ditto 52 53 /** 54 Format ID 55 */ 56 alias FMTID = const(UUID); 57 alias LPFMTID = FMTID*; /// ditto 58 alias LPCFMTID = const(FMTID)*; /// ditto 59 alias REFFMTID = const(FMTID)*; /// ditto 60 61 /** 62 Gets the $(D Guid) for the given type if possible. 63 64 You can check if a type has a Guid with a $(D is(__uuidof!T)) expression. 65 */ 66 template __uuidof(T, A...) { 67 import nulib.system.com.uuid : Guid; 68 69 static if (A.length == 0) { 70 alias attrs = __traits(getAttributes, T); 71 72 static if (attrs.length > 0) 73 enum __uuidof = __uuidof!(T, attrs); 74 else 75 static assert(0, T.stringof~" lacks a GUID!"); 76 } else static if (A.length == 1) { 77 static assert (is(typeof(A[0]) == UUID), T.stringof~" lacks a GUID!"); 78 enum __uuidof = A[0]; 79 } else static if (is(typeof(A[0]) == UUID)) { 80 enum __uuidof = A[0]; 81 } else { 82 enum __uuidof = __uuidof!(T, A[1 .. $]); 83 } 84 } 85