Home | History | Annotate | Download | only in IlmImf
      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 
     35 
     36 
     37 #ifndef INCLUDED_IMF_NAME_H
     38 #define INCLUDED_IMF_NAME_H
     39 
     40 //-----------------------------------------------------------------------------
     41 //
     42 //	class ImfName -- a zero-terminated string
     43 //	with a fixed, small maximum length
     44 //
     45 //-----------------------------------------------------------------------------
     46 
     47 #include <string.h>
     48 
     49 namespace Imf {
     50 
     51 
     52 class Name
     53 {
     54   public:
     55 
     56     //-------------
     57     // Constructors
     58     //-------------
     59 
     60     Name ();
     61     Name (const char text[]);
     62 
     63 
     64     //--------------------
     65     // Assignment operator
     66     //--------------------
     67 
     68     Name &		operator = (const char text[]);
     69 
     70 
     71     //---------------------
     72     // Access to the string
     73     //---------------------
     74 
     75     const char *	text () const		{return _text;}
     76     const char *	operator * () const	{return _text;}
     77 
     78     //---------------
     79     // Maximum length
     80     //---------------
     81 
     82     static const int	SIZE = 256;
     83     static const int	MAX_LENGTH = SIZE - 1;
     84 
     85   private:
     86 
     87     char		_text[SIZE];
     88 };
     89 
     90 
     91 bool operator == (const Name &x, const Name &y);
     92 bool operator != (const Name &x, const Name &y);
     93 bool operator < (const Name &x, const Name &y);
     94 
     95 
     96 //-----------------
     97 // Inline functions
     98 //-----------------
     99 
    100 inline Name &
    101 Name::operator = (const char text[])
    102 {
    103     strncpy (_text, text, MAX_LENGTH);
    104     return *this;
    105 }
    106 
    107 
    108 inline
    109 Name::Name ()
    110 {
    111     _text[0] = 0;
    112 }
    113 
    114 
    115 inline
    116 Name::Name (const char text[])
    117 {
    118     *this = text;
    119     _text [MAX_LENGTH] = 0;
    120 }
    121 
    122 
    123 inline bool
    124 operator == (const Name &x, const Name &y)
    125 {
    126     return strcmp (*x, *y) == 0;
    127 }
    128 
    129 
    130 inline bool
    131 operator != (const Name &x, const Name &y)
    132 {
    133     return !(x == y);
    134 }
    135 
    136 
    137 inline bool
    138 operator < (const Name &x, const Name &y)
    139 {
    140     return strcmp (*x, *y) < 0;
    141 }
    142 
    143 
    144 } // namespace IMF
    145 
    146 #endif
    147