001 #ifndef _GRAYCODE_HH_
002 #define _GRAYCODE_HH_
003
004
005 #define GRAYCODE_RANGECHECK
006
007 #include <iosfwd>
008 #include <string>
009
010 class GrayCode {
011
012 public:
013
014 GrayCode();
015
016
017 GrayCode(int grayCode);
018
019
020 GrayCode(const GrayCode& right);
021
022
023 ~GrayCode();
024
025
026 static GrayCode decToGray(int decNum);
027
028
029
030
031
032
033
034
035
036
037
038
039
040 static void initLUTs();
041
042
043
044
045 std::string asBitStream() const ;
046
047
048 inline int grayCode() const;
049
050
051 inline operator int() const;
052
053
054
055
056
057
058
059 inline GrayCode& operator= (const int gc);
060 inline GrayCode& operator= (const GrayCode& gc);
061 inline GrayCode& operator+=(const int gc);
062 inline GrayCode& operator+=(const GrayCode& gc);
063 inline GrayCode& operator-=(const int gc);
064 inline GrayCode& operator-=(const GrayCode& gc);
065 inline GrayCode& operator*=(const int gc);
066 inline GrayCode& operator*=(const GrayCode& gc);
067 inline GrayCode& operator/=(const int gc);
068 inline GrayCode& operator/=(const GrayCode& gc);
069
070
071
072
073
074
075 inline GrayCode& operator++();
076 inline GrayCode operator++(int);
077 inline GrayCode& operator--();
078 inline GrayCode operator--(int);
079
080
081 inline bool operator==(const GrayCode& gc) const;
082 inline bool operator!=(const GrayCode& gc) const;
083 inline bool operator>=(const GrayCode& gc) const;
084 inline bool operator<=(const GrayCode& gc) const;
085 inline bool operator> (const GrayCode& gc) const;
086 inline bool operator< (const GrayCode& gc) const;
087
088
089 inline GrayCode& operator|= (const GrayCode& gc);
090 inline GrayCode& operator&= (const GrayCode& gc);
091 inline GrayCode& operator^= (const GrayCode& gc);
092 inline GrayCode& operator<<=(size_t n);
093 inline GrayCode& operator>>=(size_t n);
094
095
096 inline GrayCode operator<<(size_t n) const;
097 inline GrayCode operator>>(size_t n) const;
098 inline GrayCode operator~() const;
099 inline friend GrayCode operator&(const GrayCode& gc1, const GrayCode& gc2);
100 inline friend GrayCode operator|(const GrayCode& gc1, const GrayCode& gc2);
101 inline friend GrayCode operator^(const GrayCode& gc1, const GrayCode& gc2);
102 inline friend GrayCode operator&(int gc1, const GrayCode& gc2);
103 inline friend GrayCode operator|(int gc1, const GrayCode& gc2);
104 inline friend GrayCode operator^(int gc1, const GrayCode& gc2);
105 inline friend GrayCode operator&(const GrayCode& gc1, int gc2);
106 inline friend GrayCode operator|(const GrayCode& gc1, int gc2);
107 inline friend GrayCode operator^(const GrayCode& gc1, int gc2);
108
109
110 inline friend GrayCode operator+(const GrayCode& gc1, const GrayCode& gc2);
111 inline friend GrayCode operator-(const GrayCode& gc1, const GrayCode& gc2);
112 inline friend GrayCode operator*(const GrayCode& gc1, const GrayCode& gc2);
113 inline friend GrayCode operator/(const GrayCode& gc1, const GrayCode& gc2);
114 inline friend GrayCode operator+(int gc1, const GrayCode& gc2);
115 inline friend GrayCode operator-(int gc1, const GrayCode& gc2);
116 inline friend GrayCode operator*(int gc1, const GrayCode& gc2);
117 inline friend GrayCode operator/(int gc1, const GrayCode& gc2);
118 inline friend GrayCode operator+(const GrayCode& gc1, int gc2);
119 inline friend GrayCode operator-(const GrayCode& gc1, int gc2);
120 inline friend GrayCode operator*(const GrayCode& gc1, int gc2);
121 inline friend GrayCode operator/(const GrayCode& gc1, int gc2);
122
123
124 friend std::ostream& operator<< (std::ostream& s, const GrayCode& grayCode);
125
126
127
128
129
130 private:
131
132 static int const MAX_GRAYCODE = 256;
133
134 static int _gray[MAX_GRAYCODE];
135 static int _dec[MAX_GRAYCODE];
136
137 static bool _isInitialized;
138
139 int _grayCode;
140
141 };
142
143 #include "TrackingObjects/SiData/GrayCode.icc"
144
145 #endif
Send problems or questions to cdfcode@fnal.gov