oaRange.h

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

Return to top of page