00001 // ***************************************************************************** 00002 // ***************************************************************************** 00003 // oaRange.h 00004 // 00005 // This file contains the definitions for the following classes: 00006 // oaRangeType 00007 // This class is a wrapper around oaRangeTypeEnum enumeration. 00008 // oaRangeBase 00009 // This is a base class for range classes. 00010 // oaRange 00011 // Instantiations of this template will represent the ranges for different 00012 // types of numerical data. 00013 // oaIntRange 00014 // oaUInt8Range 00015 // These are wrapper classes for template instances of oaRange classes. 00016 // 00017 // ***************************************************************************** 00018 // Except as specified in the OpenAccess terms of use of Cadence or Silicon 00019 // Integration Initiative, this material may not be copied, modified, 00020 // re-published, uploaded, executed, or distributed in any way, in any medium, 00021 // in whole or in part, without prior written permission from Cadence. 00022 // 00023 // Copyright 2005 Cadence Design Systems, Inc. 00024 // All Rights Reserved. 00025 // 00026 // $Author: icftcm $ 00027 // $Revision: #1 $ 00028 // $Date: 2010/08/09 $ 00029 // $State: Exp $ 00030 // ***************************************************************************** 00031 // ***************************************************************************** 00032 00033 00034 00035 #if !defined(oaRange_P) 00036 #define oaRange_P 00037 00038 00039 00040 // ***************************************************************************** 00041 // Nested includes 00042 // ***************************************************************************** 00043 #include "oaString.h" 00044 00045 00046 00047 // ***************************************************************************** 00048 // Declare and define types in the OpenAccess namespace. 00049 // ***************************************************************************** 00050 BEGIN_OA_NAMESPACE 00051 00052 00053 00054 // ***************************************************************************** 00055 // Forward Public Class Declarations 00056 // ***************************************************************************** 00057 class oaString; 00058 class oaIntRange; 00059 class oaUInt8Range; 00060 00061 template <class T> 00062 class oaChecker; 00063 00064 00065 00066 // ***************************************************************************** 00067 // oaRangeTypeEnum 00068 // ***************************************************************************** 00069 #define oavNumRangeTypes 8 00070 00071 enum oaRangeTypeEnum { 00072 oacLessThanRangeType = 0, 00073 oacLessThanEqualRangeType = 1, 00074 oacGreaterThanRangeType = 2, 00075 oacGreaterThanEqualRangeType = 3, 00076 oacClosedRangeType = 4, 00077 oacOpenRangeType = 5, 00078 oacOpenLeftRangeType = 6, 00079 oacOpenRightRangeType = 7 00080 }; 00081 00082 00083 00084 // ***************************************************************************** 00085 // oaRangeType 00086 // ***************************************************************************** 00087 class OA_BASE_DLL_API oaRangeType { 00088 public: 00089 oaRangeType(oaRangeTypeEnum valueIn); 00090 oaRangeType(const oaString &name); 00091 ~oaRangeType(); 00092 00093 const oaString &getName() const; 00094 operator oaRangeTypeEnum() const; 00095 00096 private: 00097 static const oaString *initNames(); 00098 00099 oaRangeTypeEnum value; 00100 00101 static const oaString *names; 00102 }; 00103 00104 00105 00106 // ***************************************************************************** 00107 // oaRangeBase 00108 // ***************************************************************************** 00109 class OA_BASE_DLL_API oaRangeBase { 00110 public: 00111 oaRangeBase(); 00112 oaRangeBase(oaRangeTypeEnum rangeTypeIn); 00113 00114 oaRangeType getRangeType() const; 00115 oaBoolean hasLowerBound() const; 00116 oaBoolean hasUpperBound() const; 00117 00118 private: 00119 oaRangeTypeEnum rangeType; 00120 00121 friend class oaChecker<oaIntRange>; 00122 friend class oaChecker<oaUInt8Range>; 00123 }; 00124 00125 00126 00127 // ***************************************************************************** 00128 // oaRange 00129 // ***************************************************************************** 00130 template <class T> 00131 class oaRange : public oaRangeBase { 00132 public: 00133 oaRange(); 00134 oaRange(oaRangeType type, 00135 T value); 00136 oaRange(oaRangeType type, 00137 T lowerBoundIn, 00138 T upperBoundIn); 00139 00140 T getLowerBound() const; 00141 T getUpperBound() const; 00142 00143 void setLowerBound(T lowerBoundIn); 00144 void setUpperBound(T upperBoundIn); 00145 void setBounds(T lowerBoundIn, 00146 T upperBoundIn); 00147 00148 oaBoolean isInRange(const T &value) const; 00149 00150 oaBoolean operator==(const oaRange<T> &range) const; 00151 oaBoolean operator!=(const oaRange<T> &range) const; 00152 00153 private: 00154 T lowerBound; 00155 T upperBound; 00156 00157 friend class oaChecker<oaIntRange>; 00158 friend class oaChecker<oaUInt8Range>; 00159 }; 00160 00161 00162 00163 // ***************************************************************************** 00164 // oaIntRange 00165 // ***************************************************************************** 00166 class OA_BASE_DLL_API oaIntRange : public oaRange<oaInt4> { 00167 public: 00168 oaIntRange(); 00169 oaIntRange(oaRangeType type, 00170 oaInt4 value); 00171 oaIntRange(oaRangeType type, 00172 oaInt4 lowerBoundIn, 00173 oaInt4 upperBoundIn); 00174 }; 00175 00176 00177 00178 // ***************************************************************************** 00179 // oaUInt8Range 00180 // ***************************************************************************** 00181 class OA_BASE_DLL_API oaUInt8Range : public oaRange<oaUInt8> { 00182 public: 00183 oaUInt8Range(); 00184 oaUInt8Range(oaRangeType type, 00185 oaUInt8 value); 00186 oaUInt8Range(oaRangeType type, 00187 oaUInt8 lowerBoundIn, 00188 oaUInt8 upperBoundIn); 00189 }; 00190 00191 00192 00193 END_OA_NAMESPACE 00194 00195 #endif
Copyright © 2002 - 2010 Cadence Design Systems, Inc.
All Rights Reserved.