Diana
0.8.3
|
00001 /* ----------------------------------------------------------------------------- 00002 * Diana process modelling, simulation and analysis software 00003 * Copyright (c) 2005, Michael Krasnyk 00004 * All rights reserved. 00005 * 00006 * This file is a part of Diana process modelling, simulation and analysis software 00007 * 00008 * Diana is free software; you can redistribute it and/or modify it 00009 * under the terms of the GNU General Public License as published 00010 * by the Free Software Foundation (see accompanying file LICENSE) 00011 * ----------------------------------------------------------------------------- 00012 * $Id: CapeVariant.hpp 8160 2009-03-16 18:36:30Z miha $ 00013 * ----------------------------------------------------------------------------- 00014 * Description: 00015 */ 00016 00017 #ifndef CAPE_VARIANT_HPP 00018 #define CAPE_VARIANT_HPP 00019 00020 #include "CapeTypes.hpp" 00021 #include "DianaArray.hpp" 00022 #include "DianaSparseArray.hpp" 00023 00024 namespace Common{ 00025 namespace Types{ 00026 00045 class CapeVariant{ 00046 #ifndef SWIG 00047 00048 friend std::ostream& operator<<(std::ostream& out_file, const CapeVariant& variant); 00049 #endif 00050 private: 00051 Common::Types::CapeType type; 00052 00054 union _value{ 00055 Common::Types::CapeDouble d; 00056 Common::Types::CapeFloat f; 00057 Common::Types::CapeLong l; 00058 Common::Types::CapeBoolean b; 00059 Common::Types::CapeChar ch; 00060 Common::Types::CapeShort sh; 00061 Common::Types::CapeString* str; 00062 Common::Types::CapeArrayString* strarray; 00063 Common::Types::CapeDate* date; 00064 Common::Types::CapeURL* url; 00065 Common::Types::CapePointer ptr; 00066 Diana::DianaArray* array; 00067 Diana::DianaSparseArray* sarray; 00068 }value; 00069 00070 public: 00072 CapeVariant(); 00073 00075 virtual ~CapeVariant(); 00076 00077 CapeVariant( const CapeVariant& var ); 00078 CapeVariant( const CapeDouble _val ); 00079 CapeVariant( const CapeFloat _val ); 00080 CapeVariant( const CapeLong _val ); 00081 CapeVariant( const bool _val ); 00082 CapeVariant( const CapeBoolean _val ); 00083 CapeVariant( const CapeChar _val ); 00084 CapeVariant( const CapeShort _val ); 00086 // Important!!! 00087 // for CapeDate and CapeURL casting to the CapeString 00088 #ifndef SWIG // leave only one overloaded definition for the Python 00089 CapeVariant( const CapeString& _val ); 00090 CapeVariant( const CapeString* _val ); 00091 #endif 00092 CapeVariant( const char* _val ); 00093 CapeVariant( const CapeArrayString& _val ); 00095 CapeVariant( const CapePointer _val ); 00097 CapeVariant( const Diana::DianaArray& _val ); 00098 CapeVariant( const Diana::DianaSparseArray& _val ); 00100 // assignment constructors 00101 #ifndef SWIG 00102 CapeVariant& operator=(const CapeVariant& v); 00103 CapeVariant& operator=(const CapeDouble d); 00104 CapeVariant& operator=(const CapeFloat f); 00105 CapeVariant& operator=(const CapeLong l); 00106 CapeVariant& operator=(const bool b); 00107 CapeVariant& operator=(const CapeBoolean b); 00108 CapeVariant& operator=(const CapeChar ch); 00109 CapeVariant& operator=(const CapeShort sh); 00111 // Important!!! 00112 // for CapeDate and CapeURL casting to the CapeString 00113 CapeVariant& operator=(const CapeString& str); 00114 CapeVariant& operator=(const CapeString* str); 00115 CapeVariant& operator=(const char* str); 00116 CapeVariant& operator=(const CapeArrayString& str); 00117 CapeVariant& operator=(const CapePointer ptr); 00118 CapeVariant& operator=(const Diana::DianaArray& array); 00119 CapeVariant& operator=(const Diana::DianaSparseArray& array); 00121 Types::CapeType getType() const; 00123 CapeDouble asDouble() const; 00124 CapeFloat asFloat() const; 00125 CapeLong asLong() const; 00126 CapeBoolean asBoolean() const; 00127 CapeChar asChar() const; 00128 CapeShort asShort() const; 00129 CapeString asString() const; 00130 CapeDate asDate() const; 00131 CapeURL asURL() const; 00132 CapePointer asPointer() const; 00133 Diana::DianaArray& asDianaArray() const; 00134 Diana::DianaSparseArray& asDianaSparseArray() const; 00135 CapeArrayString& asStringArray() const; 00136 #endif 00137 00138 private: 00139 void freeData(); 00140 }; 00141 00143 typedef std::vector<CapeVariant> CapeArrayVariant; 00144 00145 #ifndef SWIG 00146 00147 std::ostream& operator<<(std::ostream& out_file, const CapeVariant& variant); 00148 #endif 00149 00150 }; 00151 }; 00152 00153 00154 #endif // CAPE_VARIANT_HPP