oaPlugInValue.h

Go to the documentation of this file.
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

Return to top of page