GeoTessCPP  2.0.0
Software to facilitate storage and retrieval of 3D information about the Earth.
 All Classes Namespaces Files Functions Variables Typedefs Friends Defines
include/GeoTessEnumType.h
Go to the documentation of this file.
00001 //- ****************************************************************************
00002 //- 
00003 //- Copyright 2009 Sandia Corporation. Under the terms of Contract
00004 //- DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government
00005 //- retains certain rights in this software.
00006 //- 
00007 //- BSD Open Source License.
00008 //- All rights reserved.
00009 //- 
00010 //- Redistribution and use in source and binary forms, with or without
00011 //- modification, are permitted provided that the following conditions are met:
00012 //- 
00013 //-    * Redistributions of source code must retain the above copyright notice,
00014 //-      this list of conditions and the following disclaimer.
00015 //-    * Redistributions in binary form must reproduce the above copyright
00016 //-      notice, this list of conditions and the following disclaimer in the
00017 //-      documentation and/or other materials provided with the distribution.
00018 //-    * Neither the name of Sandia National Laboratories nor the names of its
00019 //-      contributors may be used to endorse or promote products derived from
00020 //-      this software without specific prior written permission.
00021 //- 
00022 //- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00023 //- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00024 //- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00025 //- ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00026 //- LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00027 //- CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00028 //- SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00029 //- INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00030 //- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00031 //- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00032 //- POSSIBILITY OF SUCH DAMAGE.
00033 //-
00034 //- ****************************************************************************
00035 
00036 #ifndef ENUMTYPE_OBJECT_H
00037 #define ENUMTYPE_OBJECT_H
00038 
00039 // **** _SYSTEM INCLUDES_ ******************************************************
00040 
00041 #include <iostream>
00042 #include <string>
00043 
00044 // use standard library objects
00045 using namespace std;
00046 
00047 // **** _LOCAL INCLUDES_ *******************************************************
00048 
00049 #include "CPPUtils.h"
00050 
00051 // **** _BEGIN GEOTESS NAMESPACE_ **********************************************
00052 
00053 namespace geotess
00054 {
00055 
00056 // **** _FORWARD REFERENCES_ ***************************************************
00057 
00058 // **** _CLASS DEFINITION_ *****************************************************
00059 
00067 class GEOTESS_EXP_IMP GeoTessEnumType
00068 {
00069 protected:
00070 
00074         GeoTessEnumType()
00075                         : aName(""), aOrdinal(-1)
00076         {
00077         }
00078 
00082         GeoTessEnumType(const GeoTessEnumType& et)
00083                         : aName(et.aName), aOrdinal(et.aOrdinal)
00084         {
00085         }
00086 
00090         GeoTessEnumType& operator=(const GeoTessEnumType& et)
00091         {
00092                 return *this;
00093         }
00094 
00098         const string aName;
00099 
00103         const int aOrdinal;
00104 
00109         GeoTessEnumType(const string& name, int ordinal)
00110                         : aName(name), aOrdinal(ordinal)
00111         {
00112         }
00113 
00125         static const GeoTessEnumType* valueOf(const string& s,
00126                         GeoTessEnumType const* const * const array, int n);
00127 
00128 public:
00129 
00133         virtual ~GeoTessEnumType() { }
00134 
00138         string toString() const { return aName; }
00139 
00143         string name() const { return aName; }
00144 
00148         int ordinal() const { return aOrdinal; }
00149 
00153         friend bool operator==(const GeoTessEnumType& x, const GeoTessEnumType& y) { return &(x) == &(y); }
00154 
00158         friend bool operator!=(const GeoTessEnumType& x, const GeoTessEnumType &y) { return !(x == y); }
00159 
00160 };
00161 // end class EnumType
00162 
00166 inline std::ostream& operator<<(std::ostream& o, GeoTessEnumType& s)
00167 { return o << s.toString(); }
00168 
00169 } // end namespace geotess
00170 
00171 #endif  // ENUMTYPE_OBJECT_H