oaArray.h

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

Return to top of page