ImfName.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. ///////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
  4. // Digital Ltd. LLC
  5. //
  6. // All rights reserved.
  7. //
  8. // Redistribution and use in source and binary forms, with or without
  9. // modification, are permitted provided that the following conditions are
  10. // met:
  11. // * Redistributions of source code must retain the above copyright
  12. // notice, this list of conditions and the following disclaimer.
  13. // * Redistributions in binary form must reproduce the above
  14. // copyright notice, this list of conditions and the following disclaimer
  15. // in the documentation and/or other materials provided with the
  16. // distribution.
  17. // * Neither the name of Industrial Light & Magic nor the names of
  18. // its contributors may be used to endorse or promote products derived
  19. // from this software without specific prior written permission.
  20. //
  21. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  22. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  23. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  24. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  25. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  26. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  27. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  28. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  29. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  30. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  31. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  32. //
  33. ///////////////////////////////////////////////////////////////////////////
  34. #ifndef INCLUDED_IMF_NAME_H
  35. #define INCLUDED_IMF_NAME_H
  36. //-----------------------------------------------------------------------------
  37. //
  38. // class ImfName -- a zero-terminated string
  39. // with a fixed, small maximum length
  40. //
  41. //-----------------------------------------------------------------------------
  42. #include <string.h>
  43. #include "ImfNamespace.h"
  44. #include "ImfExport.h"
  45. OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER
  46. class Name
  47. {
  48. public:
  49. //-------------
  50. // Constructors
  51. //-------------
  52. IMF_EXPORT
  53. Name ();
  54. IMF_EXPORT
  55. Name (const char text[]);
  56. //--------------------
  57. // Assignment operator
  58. //--------------------
  59. IMF_EXPORT
  60. Name & operator = (const char text[]);
  61. //---------------------
  62. // Access to the string
  63. //---------------------
  64. IMF_EXPORT
  65. const char * text () const {return _text;}
  66. IMF_EXPORT
  67. const char * operator * () const {return _text;}
  68. //---------------
  69. // Maximum length
  70. //---------------
  71. static const int SIZE = 256;
  72. static const int MAX_LENGTH = SIZE - 1;
  73. private:
  74. char _text[SIZE];
  75. };
  76. IMF_EXPORT
  77. bool operator == (const Name &x, const Name &y);
  78. IMF_EXPORT
  79. bool operator != (const Name &x, const Name &y);
  80. IMF_EXPORT
  81. bool operator < (const Name &x, const Name &y);
  82. //-----------------
  83. // Inline functions
  84. //-----------------
  85. inline Name &
  86. Name::operator = (const char text[])
  87. {
  88. strncpy (_text, text, MAX_LENGTH);
  89. return *this;
  90. }
  91. inline
  92. Name::Name ()
  93. {
  94. _text[0] = 0;
  95. }
  96. inline
  97. Name::Name (const char text[])
  98. {
  99. *this = text;
  100. _text [MAX_LENGTH] = 0;
  101. }
  102. inline bool
  103. operator == (const Name &x, const Name &y)
  104. {
  105. return strcmp (*x, *y) == 0;
  106. }
  107. inline bool
  108. operator != (const Name &x, const Name &y)
  109. {
  110. return !(x == y);
  111. }
  112. inline bool
  113. operator < (const Name &x, const Name &y)
  114. {
  115. return strcmp (*x, *y) < 0;
  116. }
  117. OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT
  118. #endif