oaLookupTbl.h

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

Return to top of page