00001 // ***************************************************************************** 00002 // ***************************************************************************** 00003 // oaArray.h 00004 // 00005 // This file contains definitions of the oaArrayBase<>, oaArray<> and oaSubset 00006 // class templates. The oaArrayBase<> class implements a template for an array 00007 // of elements. The size of the array can be different than the number of 00008 // elements actually stored. This is useful in situations where the array is 00009 // being used as a buffer because it reduces the need to re-allocate the array. 00010 // 00011 // The oaArray<> template extends the oaArrayBase<> template with some higher- 00012 // level operations that allow it to function more like a typical container. 00013 // 00014 // The oaSubset<> template is an ordered array for fast lookup. 00015 // 00016 // The oaManagedTypeArray is an ordered array of oaManagedTypes. 00017 // 00018 // ***************************************************************************** 00019 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00020 // Integration Initiative, this material may not be copied, modified, 00021 // re-published, uploaded, executed, or distributed in any way, in any medium, 00022 // in whole or in part, without prior written permission from Cadence. 00023 // 00024 // Copyright 2002-2005 Cadence Design Systems, Inc. 00025 // All Rights Reserved. 00026 // 00027 // $Author: icftcm $ 00028 // $Revision: #1 $ 00029 // $Date: 2010/08/09 $ 00030 // $State: Exp $ 00031 // ***************************************************************************** 00032 // ***************************************************************************** 00033 00034 00035 00036 #if !defined(oaArray_P) 00037 #define oaArray_P 00038 00039 00040 00041 // ***************************************************************************** 00042 // Nested includes 00043 // ***************************************************************************** 00044 #include "oaBaseTypes.h" 00045 #include "oaType.h" 00046 00047 00048 00049 // ***************************************************************************** 00050 // Declare and define types in the OpenAccess namespace. 00051 // ***************************************************************************** 00052 BEGIN_OA_NAMESPACE 00053 00054 00055 00056 // ***************************************************************************** 00057 // Forward Public Class Declarations 00058 // ***************************************************************************** 00059 class oaFeature; 00060 class oaObject; 00061 00062 00063 // ***************************************************************************** 00064 // oaArrayBase 00065 // ***************************************************************************** 00066 template <class T> 00067 class oaArrayBase { 00068 public: 00069 oaArrayBase(oaUInt4 size = 0); 00070 oaArrayBase(const oaArrayBase<T> &arrayIn); 00071 oaArrayBase(const T arrayIn[], 00072 oaUInt4 numElementsIn); 00073 00074 ~oaArrayBase(); 00075 00076 oaArrayBase<T> &operator=(const oaArrayBase<T> &arrayIn); 00077 00078 const T *getElements() const; 00079 oaUInt4 getNumElements() const; 00080 oaUInt4 getSize() const; 00081 00082 void setNumElements(oaUInt4 n); 00083 void setSize(oaUInt4 newSize, 00084 oaBoolean saveElements = false); 00085 void set(const T *arrayIn, 00086 oaUInt4 numElementsIn); 00087 00088 const T &get(oaUInt4 index) const; 00089 T &get(oaUInt4 index); 00090 00091 const T &operator[](oaUInt4 i) const; 00092 T &operator[](oaUInt4 i); 00093 00094 protected: 00095 void copyElements(T *elementsTo, 00096 const T *elementsFrom, 00097 oaUInt4 num); 00098 00099 oaUInt4 size; 00100 oaUInt4 numElements; 00101 T *elements; 00102 }; 00103 00104 00105 00106 // ***************************************************************************** 00107 // oaArray 00108 // ***************************************************************************** 00109 template <class T> 00110 class oaArray : public oaArrayBase<T> { 00111 public: 00112 oaArray(oaUInt4 size = 0); 00113 oaArray(const oaArray<T> &arrayIn); 00114 oaArray(const T arrayIn[], 00115 oaUInt4 numElementsIn); 00116 00117 virtual ~oaArray(); 00118 00119 oaUInt4 find(const T &element) const; 00120 00121 void append(const T &element); 00122 void append(const oaArray<T> &arrayIn); 00123 00124 void remove(const T &element); 00125 00126 void sort(int (*compare)(const T *, 00127 const T *)); 00128 00129 oaArray<T> &operator=(const oaArray<T> &arrayIn); 00130 00131 virtual oaBoolean operator==(const oaArray<T> &other) const; 00132 oaBoolean operator!=(const oaArray<T> &other) const; 00133 00134 protected: 00135 virtual void copyElements(T *elementsTo, 00136 const T *elementsFrom, 00137 oaUInt4 num); 00138 virtual oaBoolean cmpElements(const T *elementsOther, 00139 oaUInt4 num) const; 00140 }; 00141 00142 00143 00144 // ***************************************************************************** 00145 // oaSubset 00146 // ***************************************************************************** 00147 template <class T> 00148 class oaSubset : public oaArray<T> { 00149 public: 00150 oaSubset(); 00151 00152 void add(T type); 00153 oaBoolean includes(T type) const; 00154 }; 00155 00156 00157 00158 // ***************************************************************************** 00159 // oaFeatureArray 00160 // ***************************************************************************** 00161 class OA_BASE_DLL_API oaFeatureArray : public oaArray<oaFeature*> { 00162 public: 00163 oaFeatureArray(oaUInt4 sizeIn = 0); 00164 }; 00165 00166 00167 00168 // ***************************************************************************** 00169 // oaManagedTypeArray 00170 // ***************************************************************************** 00171 class OA_BASE_DLL_API oaManagedTypeArray : public oaSubset<oaManagedType> { 00172 }; 00173 00174 00175 00176 // ***************************************************************************** 00177 // Explicit template instantiations 00178 // ***************************************************************************** 00179 #if defined(OA_BASE_DLL_EXTERN) 00180 OA_BASE_DLL_EXTERN template 00181 class OA_BASE_DLL_API oaArray<oaString>; 00182 00183 OA_BASE_DLL_EXTERN template 00184 class OA_BASE_DLL_API oaArray<oaFeature*>; 00185 00186 OA_BASE_DLL_EXTERN template 00187 class OA_BASE_DLL_API oaArray<oaUInt4>; 00188 00189 OA_BASE_DLL_EXTERN template 00190 class OA_BASE_DLL_API oaArray<oaObject*>; 00191 00192 OA_BASE_DLL_EXTERN template 00193 class OA_BASE_DLL_API oaArray<oaArray<oaUInt4> >; 00194 #endif 00195 00196 00197 00198 END_OA_NAMESPACE 00199 00200 #endif 00201
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.