PBRT
/home/felix/UBC/projects/AdaptiveLightfieldSampling/pbrt_v2/src/3rdparty/openexr-1.7.0/ImfName.h
00001 
00002 //
00003 // Copyright (c) 2002, Industrial Light & Magic, a division of Lucas
00004 // Digital Ltd. LLC
00005 // 
00006 // All rights reserved.
00007 // 
00008 // Redistribution and use in source and binary forms, with or without
00009 // modification, are permitted provided that the following conditions are
00010 // met:
00011 // *       Redistributions of source code must retain the above copyright
00012 // notice, this list of conditions and the following disclaimer.
00013 // *       Redistributions in binary form must reproduce the above
00014 // copyright notice, this list of conditions and the following disclaimer
00015 // in the documentation and/or other materials provided with the
00016 // distribution.
00017 // *       Neither the name of Industrial Light & Magic nor the names of
00018 // its contributors may be used to endorse or promote products derived
00019 // from this software without specific prior written permission. 
00020 // 
00021 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00022 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00023 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00024 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00025 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00026 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00027 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00028 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00029 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00030 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00031 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00032 //
00034 
00035 
00036 
00037 #ifndef INCLUDED_IMF_NAME_H
00038 #define INCLUDED_IMF_NAME_H
00039 
00040 //-----------------------------------------------------------------------------
00041 //
00042 //      class ImfName -- a zero-terminated string
00043 //      with a fixed, small maximum length
00044 //
00045 //-----------------------------------------------------------------------------
00046 
00047 #include <string.h>
00048 
00049 namespace Imf {
00050 
00051 
00052 class Name
00053 {
00054   public:
00055 
00056     //-------------
00057     // Constructors
00058     //-------------
00059 
00060     Name ();
00061     Name (const char text[]);
00062 
00063 
00064     //--------------------
00065     // Assignment operator
00066     //--------------------
00067 
00068     Name &              operator = (const char text[]);
00069 
00070 
00071     //---------------------
00072     // Access to the string
00073     //---------------------
00074 
00075     const char *        text () const           {return _text;}
00076     const char *        operator * () const     {return _text;}
00077 
00078     //---------------
00079     // Maximum length
00080     //---------------
00081 
00082     static const int    SIZE = 256;
00083     static const int    MAX_LENGTH = SIZE - 1;
00084 
00085   private:
00086 
00087     char                _text[SIZE];
00088 };
00089 
00090 
00091 bool operator == (const Name &x, const Name &y);
00092 bool operator != (const Name &x, const Name &y);
00093 bool operator < (const Name &x, const Name &y);
00094 
00095 
00096 //-----------------
00097 // Inline functions
00098 //-----------------
00099 
00100 inline Name &
00101 Name::operator = (const char text[])
00102 {
00103     strncpy (_text, text, MAX_LENGTH);
00104     return *this;
00105 }
00106 
00107 
00108 inline
00109 Name::Name ()
00110 {
00111     _text[0] = 0;
00112 }
00113 
00114 
00115 inline
00116 Name::Name (const char text[])
00117 {
00118     *this = text;
00119     _text [MAX_LENGTH] = 0;
00120 }
00121 
00122 
00123 inline bool
00124 operator == (const Name &x, const Name &y)
00125 {
00126     return strcmp (*x, *y) == 0;
00127 }
00128 
00129 
00130 inline bool
00131 operator != (const Name &x, const Name &y)
00132 {
00133     return !(x == y);
00134 }
00135 
00136 
00137 inline bool
00138 operator < (const Name &x, const Name &y)
00139 {
00140     return strcmp (*x, *y) < 0;
00141 }
00142 
00143 
00144 } // namespace IMF
00145 
00146 #endif