00001 // ***************************************************************************** 00002 // ***************************************************************************** 00003 // oaPlugInValue.h 00004 // 00005 // This file contains basic implementations for value interfaces. These 00006 // implementations can be used directly to create value objects. 00007 // 00008 // Value 00009 // This class is a value that implements the IValue interface. 00010 // 00011 // ValuePtr 00012 // This class is a convenience class to convert between C++ values and Value 00013 // objects. 00014 // 00015 // ***************************************************************************** 00016 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00017 // Integration Initiative, this material may not be copied, modified, 00018 // re-published, uploaded, executed, or distributed in any way, in any medium, 00019 // in whole or in part, without prior written permission from Cadence. 00020 // 00021 // Copyright 2002-2005 Cadence Design Systems, Inc. 00022 // All Rights Reserved. 00023 // 00024 // $Author: icftcm $ 00025 // $Revision: #1 $ 00026 // $Date: 2010/08/09 $ 00027 // $State: Exp $ 00028 // ***************************************************************************** 00029 // ***************************************************************************** 00030 00031 00032 00033 #if !defined(oaPlugInValue_P) 00034 #define oaPlugInValue_P 00035 00036 00037 00038 // ***************************************************************************** 00039 // Nested includes 00040 // ***************************************************************************** 00041 #include "oaPlugInScriptInterfaces.h" 00042 #include "oaPlugInTypes.h" 00043 00044 00045 00046 // ***************************************************************************** 00047 // Declare and define types in the OpenAccess namespace. 00048 // ***************************************************************************** 00049 BEGIN_OA_PLUGIN_NAMESPACE 00050 00051 00052 00053 // ***************************************************************************** 00054 // Value<T> 00055 // ***************************************************************************** 00056 template<class T> 00057 class Value : public PlugInBase<IValue<T> > { 00058 public: 00059 Value(T v); 00060 virtual inline ~Value(); 00061 00062 virtual const char *getType(); 00063 virtual SRef<IString> toString(); 00064 00065 virtual inline T getValue(); 00066 virtual inline void setValue(T v); 00067 00068 private: 00069 T value; 00070 }; 00071 00072 00073 00074 // ***************************************************************************** 00075 // Value<const char*> 00076 // ***************************************************************************** 00077 template<> 00078 class Value<const char*> : public PlugInBase<IStringValue> { 00079 public: 00080 Value(const char *v); 00081 virtual inline ~Value(); 00082 00083 virtual inline const char *getType(); 00084 virtual SRef<IString> toString(); 00085 00086 virtual inline const char *getValue(); 00087 virtual inline void setValue(const char *v); 00088 00089 private: 00090 std::string value; 00091 }; 00092 00093 00094 00095 // ***************************************************************************** 00096 // TypeValue 00097 // ***************************************************************************** 00098 class TypeValue : public PlugInBase<ITypeValue> { 00099 public: 00100 TypeValue(void *v, 00101 const char *t); 00102 virtual ~TypeValue(); 00103 00104 virtual const char *getType(); 00105 virtual SRef<IString> toString(); 00106 00107 virtual void *getValue(); 00108 virtual void setValue(void *v); 00109 00110 private: 00111 std::string type; 00112 void *value; 00113 }; 00114 00115 00116 00117 // ***************************************************************************** 00118 // ValueTraits<T> 00119 // ***************************************************************************** 00120 template<class T> 00121 class ValueTraits { 00122 public: 00123 enum {isPrimitive = 0}; 00124 }; 00125 00126 template<> 00127 class ValueTraits<char> { 00128 public: 00129 enum {isPrimitive = 1}; 00130 }; 00131 template<> 00132 class ValueTraits<oa::oaInt2> { 00133 public: 00134 enum {isPrimitive = 1}; 00135 }; 00136 template<> 00137 class ValueTraits<oa::oaUInt2> { 00138 public: 00139 enum {isPrimitive = 1}; 00140 }; 00141 template<> 00142 class ValueTraits<oa::oaInt4> { 00143 public: 00144 enum {isPrimitive = 1}; 00145 }; 00146 template<> 00147 class ValueTraits<oa::oaUInt4> { 00148 public: 00149 enum {isPrimitive = 1}; 00150 }; 00151 template<> 00152 class ValueTraits<oa::oaInt8> { 00153 public: 00154 enum {isPrimitive = 1}; 00155 }; 00156 template<> 00157 class ValueTraits<oa::oaUInt8> { 00158 public: 00159 enum {isPrimitive = 1}; 00160 }; 00161 template<> 00162 class ValueTraits<float> { 00163 public: 00164 enum {isPrimitive = 1}; 00165 }; 00166 template<> 00167 class ValueTraits<double> { 00168 public: 00169 enum {isPrimitive = 1}; 00170 }; 00171 template<> 00172 class ValueTraits<const char*> { 00173 public: 00174 enum {isPrimitive = 1}; 00175 }; 00176 00177 00178 00179 // ***************************************************************************** 00180 // ValuePtr<T, 1> 00181 // ***************************************************************************** 00182 template<class T, const unsigned int prim = ValueTraits<T>::isPrimitive> 00183 class ValuePtr; 00184 00185 template<class T> 00186 class ValuePtr<T, 1> : public SPtr<IBaseValue> { 00187 public: 00188 ValuePtr(); 00189 ValuePtr(T v); 00190 ValuePtr(IBaseValue *in); 00191 ValuePtr(const SRef<IBaseValue> &in); 00192 00193 operator T(); 00194 ValuePtr &operator=(T v); 00195 ValuePtr &operator=(const SRef<IBaseValue> &v); 00196 }; 00197 00198 00199 00200 // ***************************************************************************** 00201 // ValuePtr<T, 0> 00202 // ***************************************************************************** 00203 template<class T> 00204 class ValuePtr<T, 0> : public SPtr<IBaseValue> { 00205 public: 00206 ValuePtr(); 00207 ValuePtr(T value, 00208 const char *type); 00209 ValuePtr(IBaseValue *in, 00210 const char *type); 00211 ValuePtr(const SRef<IBaseValue> &in, 00212 const char *type); 00213 00214 T getValue(); 00215 00216 ValuePtr<T, 0> &operator=(const SRef<IBaseValue> &v); 00217 }; 00218 00219 00220 00221 END_OA_PLUGIN_NAMESPACE 00222 00223 #endif
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.