/binding/win32/guiddef.d

http://github.com/wilkie/djehuty · D · 86 lines · 48 code · 16 blank · 22 comment · 4 complexity · 1409ec7b01d62bdb9be6c3df3883ca0b MD5 · raw file

  1. /*
  2. * guiddef.d
  3. *
  4. * This module is a port of guiddef.h to D.
  5. * The original copyright notice appears after this information block.
  6. *
  7. * Author: Dave Wilkinson
  8. * Originated: November 24th, 2009
  9. *
  10. */
  11. module binding.win32.guiddef;
  12. //+---------------------------------------------------------------------------
  13. //
  14. // Microsoft Windows
  15. // Copyright (c) Microsoft Corporation. All rights reserved.
  16. //
  17. // File: guiddef.h
  18. //
  19. // Contents: GUID definition
  20. //
  21. //----------------------------------------------------------------------------
  22. import binding.c;
  23. struct GUID {
  24. Culong_t Data1;
  25. ushort Data2;
  26. ushort Data3;
  27. ubyte[8] Data4;
  28. GUID define(Culong_t d1, ushort d2, ushort d3, byte b1, byte b2, byte b3, byte b4, byte b5, byte b6, byte b7, byte b8) {
  29. GUID ret;
  30. ret.Data1 = d1;
  31. ret.Data2 = d2;
  32. ret.Data3 = d3;
  33. ret.Data4[0] = b1;
  34. ret.Data4[1] = b2;
  35. ret.Data4[2] = b3;
  36. ret.Data4[3] = b4;
  37. ret.Data4[4] = b5;
  38. ret.Data4[5] = b6;
  39. ret.Data4[6] = b7;
  40. ret.Data4[7] = b8;
  41. return ret;
  42. }
  43. }
  44. typedef GUID* LPGUID;
  45. typedef GUID* LPCGUID;
  46. typedef GUID IID;
  47. typedef IID* LPIID;
  48. const auto GUID_NULL = GUID.init;
  49. const auto IID_NULL = GUID_NULL;
  50. const auto CLSID_NULL = GUID_NULL;
  51. const auto FMTID_NULL = GUID_NULL;
  52. typedef GUID CLSID;
  53. typedef CLSID *LPCLSID;
  54. typedef GUID FMTID;
  55. typedef FMTID *LPFMTID;
  56. typedef GUID REFGUID;
  57. // Faster (but makes code fatter) inline version...use sparingly
  58. int InlineIsEqualGUID(REFGUID rguid1, REFGUID rguid2) {
  59. return (
  60. (cast(Culong_t *) &rguid1)[0] == (cast(Culong_t *) &rguid2)[0] &&
  61. (cast(Culong_t *) &rguid1)[1] == (cast(Culong_t *) &rguid2)[1] &&
  62. (cast(Culong_t *) &rguid1)[2] == (cast(Culong_t *) &rguid2)[2] &&
  63. (cast(Culong_t *) &rguid1)[3] == (cast(Culong_t *) &rguid2)[3]);
  64. }
  65. int IsEqualGUID(REFGUID rguid1, REFGUID rguid2) {
  66. return !memcmp(&rguid1, &rguid2, sizeof(GUID));
  67. }
  68. // Same type, different name
  69. alias IsEqualGUID IsEqualIID;
  70. alias IsEqualGUID IsEqualCLSID;