00001 // ***************************************************************************** 00002 // oaLookupTbl.h 00003 // 00004 // This file contains the definition the oa1DLookupTbl and oa2DLookupTbl 00005 // classes. 00006 // 00007 // ***************************************************************************** 00008 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00009 // Integration Initiative, this material may not be copied, modified, 00010 // re-published, uploaded, executed, or distributed in any way, in any medium, 00011 // in whole or in part, without prior written permission from Cadence. 00012 // 00013 // Copyright 2002-2005 Cadence Design Systems, Inc. 00014 // All Rights Reserved. 00015 // 00016 // $Author: icftcm $ 00017 // $Revision: #1 $ 00018 // $Date: 2010/08/09 $ 00019 // $State: Exp $ 00020 // ***************************************************************************** 00021 // ***************************************************************************** 00022 00023 00024 00025 #if !defined(oaLookupTbl_P) 00026 #define oaLookupTbl_P 00027 00028 00029 00030 // ***************************************************************************** 00031 // Nested includes 00032 // ***************************************************************************** 00033 #include "oaString.h" 00034 00035 00036 00037 // ***************************************************************************** 00038 // Declare and define types in the OpenAccess namespace. 00039 // ***************************************************************************** 00040 BEGIN_OA_NAMESPACE 00041 00042 00043 00044 // ***************************************************************************** 00045 // Forward Class Declarations 00046 // ***************************************************************************** 00047 class oaString; 00048 00049 00050 00051 // ***************************************************************************** 00052 // oaInterpolateTypeEnum 00053 // ***************************************************************************** 00054 #define oavNumInterpolateTypes 5 00055 00056 enum oaInterpolateTypeEnum { 00057 oacSnapDownInterpolateType = 0, 00058 oacSnapUpInterpolateType = 1, 00059 oacLinearInterpolateType = 2, 00060 oacInclusiveSnapDownInterpolateType = 3, 00061 oacInclusiveSnapUpInterpolateType = 4 00062 }; 00063 00064 00065 00066 // ***************************************************************************** 00067 // oaInterpolateType 00068 // ***************************************************************************** 00069 class OA_BASE_DLL_API oaInterpolateType { 00070 public: 00071 oaInterpolateType(oaInterpolateTypeEnum valueIn); 00072 oaInterpolateType(const oaString &nameIn); 00073 ~oaInterpolateType(); 00074 00075 const oaString &getName() const; 00076 00077 operator oaInterpolateTypeEnum() const; 00078 00079 private: 00080 oaInterpolateTypeEnum value; 00081 00082 static const oaString names[]; 00083 }; 00084 00085 00086 00087 // ***************************************************************************** 00088 // oaExtrapolateTypeEnum 00089 // ***************************************************************************** 00090 #define oavNumExtrapolateTypes 3 00091 00092 enum oaExtrapolateTypeEnum { 00093 oacSnapDownExtrapolateType = 0, 00094 oacSnapUpExtrapolateType = 1, 00095 oacLinearExtrapolateType = 2 00096 }; 00097 00098 00099 00100 // ***************************************************************************** 00101 // oaExtrapolateType 00102 // ***************************************************************************** 00103 class OA_BASE_DLL_API oaExtrapolateType { 00104 public: 00105 oaExtrapolateType(oaExtrapolateTypeEnum valueIn); 00106 oaExtrapolateType(const oaString &nameIn); 00107 ~oaExtrapolateType(); 00108 00109 const oaString &getName() const; 00110 00111 operator oaExtrapolateTypeEnum() const; 00112 00113 private: 00114 oaExtrapolateTypeEnum value; 00115 00116 static const oaString names[]; 00117 }; 00118 00119 00120 00121 // ***************************************************************************** 00122 // oa1DLookupTbl 00123 // ***************************************************************************** 00124 template <class T, class U> 00125 class OA_DLL_EXPORT oa1DLookupTbl { 00126 public: 00127 oa1DLookupTbl(); 00128 oa1DLookupTbl(const oa1DLookupTbl<T, U> &tbl); 00129 oa1DLookupTbl(oaUInt4 numItemsIn, 00130 const oaString &nameIn, 00131 U defaultValue, 00132 oaInterpolateType iTypeIn = oacSnapDownInterpolateType, 00133 oaExtrapolateType eLowerTypeIn = oacSnapUpExtrapolateType, 00134 oaExtrapolateType eUpperTypeIn = oacSnapDownExtrapolateType); 00135 ~oa1DLookupTbl(); 00136 00137 oa1DLookupTbl<T, U> &operator=(const oa1DLookupTbl<T, U> &tbl); 00138 00139 oaUInt4 getNumItems() const; 00140 void getName(oaString &nameOut) const; 00141 const oaString &getName() const; 00142 oaInterpolateType getInterpolateType() const; 00143 oaExtrapolateType getLowerExtrapolateType() const; 00144 oaExtrapolateType getUpperExtrapolateType() const; 00145 U getDefaultValue() const; 00146 00147 T getHeader(oaUInt4 index) const; 00148 U getValue(oaUInt4 index) const; 00149 00150 U find(T key) const; 00151 00152 void setNumItems(oaUInt4 numItemsIn); 00153 void setName(const oaString &nameIn); 00154 void setInterpolateType(oaInterpolateType type); 00155 void setLowerExtrapolateType(oaExtrapolateType type); 00156 void setUpperExtrapolateType(oaExtrapolateType type); 00157 void setDefaultValue(U value); 00158 00159 void setHeader(oaUInt4 index, 00160 T value); 00161 void setValue(oaUInt4 index, 00162 U value); 00163 00164 oaBoolean operator==(const oa1DLookupTbl<T, U> &name) const; 00165 oaBoolean operator!=(const oa1DLookupTbl<T, U> &name) const; 00166 00167 oaUInt8 calcVMSize() const; 00168 private: 00169 U *alloc(oaUInt4 numValues); 00170 void free(U *valuesIn); 00171 void copy(U *valuesIn, 00172 oaUInt4 numValues); 00173 oaBoolean compare(U *valuesIn, 00174 oaUInt4 numValues) const; 00175 U *resize(U *valuesIn, 00176 oaUInt4 numValues); 00177 00178 void validateInterpolateType(oaInterpolateType type); 00179 void validateExtrapolateType(oaExtrapolateType type); 00180 00181 00182 U extrapolateLower(T key) const; 00183 U extrapolateUpper(T key) const; 00184 U interpolate(T key, 00185 oaUInt4 lowerIndex, 00186 oaUInt4 upperIndex) const; 00187 00188 oaUInt4 size; 00189 oaUInt4 numItems; 00190 oaString name; 00191 oaInterpolateType iType; 00192 oaExtrapolateType eLowerType; 00193 oaExtrapolateType eUpperType; 00194 T *header; 00195 U *values; 00196 U defaultVal; 00197 }; 00198 00199 00200 00201 #if defined(OA_BASE_DLL_EXTERN) 00202 OA_BASE_DLL_EXTERN template 00203 class OA_BASE_DLL_API oa1DLookupTbl<oaInt8, oaFloat>; 00204 #endif 00205 00206 00207 00208 // ***************************************************************************** 00209 // oa2DLookupTbl 00210 // ***************************************************************************** 00211 template <class T, class U, class V> 00212 class OA_DLL_EXPORT oa2DLookupTbl { 00213 public: 00214 oa2DLookupTbl(); 00215 oa2DLookupTbl(const oa2DLookupTbl<T, U, V> &tbl); 00216 oa2DLookupTbl(oaUInt4 numRowsIn, 00217 oaUInt4 numColsIn, 00218 const oaString &rowNameIn, 00219 const oaString &colNameIn, 00220 V defaultValue, 00221 oaInterpolateType iRowTypeIn = oacSnapDownInterpolateType, 00222 oaInterpolateType iColTypeIn = oacSnapDownInterpolateType, 00223 oaExtrapolateType eRowLowerTypeIn = oacSnapUpExtrapolateType, 00224 oaExtrapolateType eRowUpperTypeIn = oacSnapDownExtrapolateType, 00225 oaExtrapolateType eColLowerTypeIn = oacSnapUpExtrapolateType, 00226 oaExtrapolateType eColUpperTypeIn = oacSnapDownExtrapolateType); 00227 ~oa2DLookupTbl(); 00228 00229 oa2DLookupTbl<T, U, V> &operator=(const oa2DLookupTbl<T, U, V> &tbl); 00230 00231 oaUInt4 getNumRows() const; 00232 oaUInt4 getNumCols() const; 00233 void getRowName(oaString &name) const; 00234 void getColName(oaString &name) const; 00235 const oaString &getRowName() const; 00236 const oaString &getColName() const; 00237 oaInterpolateType getRowInterpolateType() const; 00238 oaInterpolateType getColInterpolateType() const; 00239 oaExtrapolateType getRowLowerExtrapolateType() const; 00240 oaExtrapolateType getRowUpperExtrapolateType() const; 00241 oaExtrapolateType getColLowerExtrapolateType() const; 00242 oaExtrapolateType getColUpperExtrapolateType() const; 00243 V getDefaultValue() const; 00244 00245 T getRowHeader(oaUInt4 index) const; 00246 U getColHeader(oaUInt4 index) const; 00247 V getValue(oaUInt4 rowIndex, 00248 oaUInt4 colIndex) const; 00249 00250 V find(T rowKey, 00251 U colKey) const; 00252 00253 void setNumRows(oaUInt4 numRowsIn); 00254 void setNumCols(oaUInt4 numColsIn); 00255 void setRowName(const oaString &name); 00256 void setColName(const oaString &name); 00257 void setRowInterpolateType(oaInterpolateType type); 00258 void setColInterpolateType(oaInterpolateType type); 00259 void setRowLowerExtrapolateType(oaExtrapolateType type); 00260 void setRowUpperExtrapolateType(oaExtrapolateType type); 00261 void setColLowerExtrapolateType(oaExtrapolateType type); 00262 void setColUpperExtrapolateType(oaExtrapolateType type); 00263 void setDefaultValue(V value); 00264 00265 void setRowHeader(oaUInt4 index, 00266 T value); 00267 void setColHeader(oaUInt4 index, 00268 U value); 00269 void setValue(oaUInt4 rowIndex, 00270 oaUInt4 colIndex, 00271 V value); 00272 00273 oaBoolean operator==(const oa2DLookupTbl<T, U, V> &name) const; 00274 oaBoolean operator!=(const oa2DLookupTbl<T, U, V> &name) const; 00275 00276 oaUInt8 calcVMSize() const; 00277 00278 private: 00279 V **alloc(oaUInt4 rowsIn, 00280 oaUInt4 colsIn); 00281 void free(V **valuesIn, 00282 oaUInt4 rowsIn); 00283 void copy(V **valuesIn, 00284 oaUInt4 rowsIn, 00285 oaUInt4 colsIn); 00286 oaBoolean compare(V **valuesIn, 00287 oaUInt4 rowsIn, 00288 oaUInt4 colsIn) const; 00289 void resizeRows(oaUInt4 newRowSize); 00290 void resizeCols(oaUInt4 newColSize); 00291 00292 V extrapolate(T rowKey, 00293 U colKey) const; 00294 V interpolate(T rowKey, 00295 U colKey, 00296 oaUInt4 lowerRowIndex, 00297 oaUInt4 upperRowIndex, 00298 oaUInt4 lowerColIndex, 00299 oaUInt4 upperColIndex) const; 00300 00301 void validateInterpolateType(oaInterpolateType type) const; 00302 void validateExtrapolateType(oaExtrapolateType type) const; 00303 00304 oaUInt4 getRowIndex(T rowKey) const; 00305 oaUInt4 getColIndex(U colKey) const; 00306 00307 oaUInt4 rowSize; 00308 oaUInt4 colSize; 00309 oaUInt4 numRows; 00310 oaUInt4 numCols; 00311 oaString rowName; 00312 oaString colName; 00313 oaInterpolateType irType; 00314 oaInterpolateType icType; 00315 oaExtrapolateType erlType; 00316 oaExtrapolateType eruType; 00317 oaExtrapolateType eclType; 00318 oaExtrapolateType ecuType; 00319 T *rows; 00320 U *cols; 00321 V **values; 00322 V defaultVal; 00323 }; 00324 00325 00326 00327 END_OA_NAMESPACE 00328 00329 #endif
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.