DicomUID.hpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /***************************************************************************
  2. * E-Com Technology Ltd.
  3. *
  4. * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta
  5. ***************************************************************************/
  6. #ifndef __DICOM_UID__
  7. #define __DICOM_UID__
  8. class DString;
  9. //////////////////////////////////////////////////////////////////////
  10. // class UID
  11. class DICOM_API UID
  12. {
  13. private:
  14. char uid[65];
  15. UINT Length;
  16. public:
  17. UID () { uid[0] = 0; Length = 0; }
  18. UID (const BYTE *s) { Set (s); }
  19. UID (const char *s) { Set ((BYTE*)s); }
  20. UID (const DString & str) { Set (str); }
  21. void Get (UID & u) { u = (*this); }
  22. void Set (const UID & u) { (*this) = u; }
  23. void Set (const char *s) { this->Set ((BYTE *) s); }
  24. void Set (const DString & s) { (*this) = s; }
  25. void Set (const BYTE *s)
  26. {
  27. Reset ();
  28. if (! s) return;
  29. Length = strlen ((char*) s);
  30. Length %= 65;
  31. memcpy ((char *) uid, (char *) s, Length);
  32. uid[Length] = 0;
  33. };
  34. // void Set (const VR * vr) { (*this) = (*vr); };
  35. const char * GetBuffer (UINT Min) const { return (&uid[0]); } ;
  36. void SetLength (UINT L) { Length = L; while (L < 65) uid[L++] = '\0'; };
  37. UINT GetLength (void) const { return (Length); } ;
  38. operator const char * () const { return (&uid[0]); }
  39. // TRUE if zero length
  40. BOOL IsEmpty () const { return (Length == 0); }
  41. void Reset (void)
  42. {
  43. uid[0] = 0;
  44. Length = 0;
  45. }
  46. BOOL IsValid (void) const
  47. {
  48. if (uid[0] == 0)
  49. return false;
  50. else
  51. return true;
  52. }
  53. BOOL Lookup (char * TypeDesc, int DescLength) const ;
  54. DString Lookup (void) const
  55. {
  56. DString str;
  57. int l = 1024;
  58. Lookup (str.GetBufferSetLength (l), l);
  59. return str;
  60. }
  61. int Compare (const UID & uid) const { return strcmp (GetBuffer(1), uid.GetBuffer(1)); }
  62. int Compare (const char * lpszUIDStr) const { return strcmp (GetBuffer(1), lpszUIDStr); }
  63. UID & operator = (const char * lpszUIDStr)
  64. {
  65. Set (lpszUIDStr);
  66. return (*this);
  67. }
  68. UID & operator = (const UID & ud)
  69. {
  70. memcpy (uid, ud.GetBuffer (1), sizeof (uid));
  71. SetLength (ud.GetLength ());
  72. return (*this);
  73. }
  74. UID & operator = (const DString & s)
  75. {
  76. const char * ps = (const char *)s;
  77. memcpy (uid, ps, s.GetLength()%65);
  78. SetLength (s.GetLength ()%65);
  79. return (*this);
  80. }
  81. static void GetUID (UID & uid);
  82. };
  83. DICOM_API inline bool __stdcall operator == (const UID & s1, const UID & s2) { return s1.Compare (s2) == 0; }
  84. DICOM_API inline bool __stdcall operator == (const UID & s1, const char * s2) { return s1.Compare (s2) == 0; }
  85. DICOM_API inline bool __stdcall operator == (const char * s1, const UID & s2) { return s2.Compare (s1) == 0; }
  86. DICOM_API inline bool __stdcall operator != (const UID & s1, const UID & s2) { return s1.Compare (s2) != 0; }
  87. DICOM_API inline bool __stdcall operator != (const UID & s1, const char * s2) { return s1.Compare (s2) != 0; }
  88. DICOM_API inline bool __stdcall operator != (const char * s1, const UID & s2) { return s2.Compare (s1) != 0; }
  89. DICOM_API inline bool __stdcall operator < (const UID & s1, const UID & s2) { return s1.Compare (s2) < 0; }
  90. DICOM_API inline bool __stdcall operator < (const UID & s1, const char * s2) { return s1.Compare (s2) < 0; }
  91. DICOM_API inline bool __stdcall operator < (const char * s1, const UID & s2) { return s2.Compare (s1) > 0; }
  92. DICOM_API inline bool __stdcall operator > (const UID & s1, const UID & s2) { return s1.Compare (s2) > 0; }
  93. DICOM_API inline bool __stdcall operator > (const UID & s1, const char * s2) { return s1.Compare (s2) > 0; }
  94. DICOM_API inline bool __stdcall operator > (const char * s1, const UID & s2) { return s2.Compare (s1) < 0; }
  95. DICOM_API inline bool __stdcall operator <= (const UID & s1, const UID & s2) { return s1.Compare (s2) <= 0; }
  96. DICOM_API inline bool __stdcall operator <= (const UID & s1, const char * s2) { return s1.Compare (s2) <= 0; }
  97. DICOM_API inline bool __stdcall operator <= (const char * s1 , const UID & s2) { return s2.Compare (s1) >= 0; }
  98. DICOM_API inline bool __stdcall operator >= (const UID & s1, const UID & s2) { return s1.Compare (s2) >= 0; }
  99. DICOM_API inline bool __stdcall operator >= (const UID & s1, const char * s2) { return s1.Compare (s2) >= 0; }
  100. DICOM_API inline bool __stdcall operator >= (const char * s1 , const UID & s2) { return s2.Compare (s1) <= 0; }
  101. #endif