Bitstream Interpretation Library (BIL)  0.1
PIPBitValue.hpp
Go to the documentation of this file.
1 
6 #pragma once
7 #ifndef BIL_PIPBITVALUE_HPP
8 #define BIL_PIPBITVALUE_HPP
9 
10 #include <vector>
11 #include <boost/cstdint.hpp>
13 
14 
15 namespace bil {
16 
23  class PIPBitValue {
24  public:
25 
26  /**********************************************************************/
27  /* CONSTRUCTION / DESTRUCTION */
28  /**********************************************************************/
29 
33  PIPBitValue();
34 
35 
36  /**********************************************************************/
37  /* PIP INDEX */
38  /**********************************************************************/
39 
44  void pipIndex(size_t index);
45 
50  size_t pipIndex() const;
51 
52 
53  /**********************************************************************/
54  /* BIT VALUE */
55  /**********************************************************************/
56 
58  static const boost::uint32_t MAX_BIT_COUNT = 31;
59 
61  static const boost::uint32_t VALUE_UNUSED = 0x80000000;
62 
67  void bitValue(boost::uint32_t value);
68 
73  boost::uint32_t bitValue() const;
74 
75 
76  /**********************************************************************/
77  /* MODIFICATORS */
78  /**********************************************************************/
79 
83  void clear();
84 
85 
86  private:
87 
88  friend bool operator== (const PIPBitValue& val1, const PIPBitValue& val2);
89  friend bool operator< (const PIPBitValue& val1, const PIPBitValue& val2);
90 
91  friend void writeBinary(const PIPBitValue& data, std::ostream& outputStream);
92  friend void readBinary(PIPBitValue& data, std::istream& inputStream);
93 
94  size_t m_pipIndex;
95  boost::uint32_t m_bitValue;
96 
97  };
98 
99 
101  inline bool operator== (const PIPBitValue& val1, const PIPBitValue& val2)
102  {
103  if (val1.m_bitValue != val2.m_bitValue) return false;
104  return val1.m_pipIndex == val2.m_pipIndex;
105  }
106 
108  inline bool operator!= (const PIPBitValue& val1, const PIPBitValue& val2)
109  {
110  return !(operator== (val1, val2));
111  }
112 
113 
115  inline bool operator< (const PIPBitValue& val1, const PIPBitValue& val2)
116  {
117  if (val1.m_bitValue != val2.m_bitValue) return val1.m_bitValue < val2.m_bitValue;
118  return val1.m_pipIndex < val2.m_pipIndex;
119  }
120 
122  inline bool operator> (const PIPBitValue& val1, const PIPBitValue& val2)
123  {
124  return (operator< (val2, val1));
125  }
126 
128  inline bool operator<= (const PIPBitValue& val1, const PIPBitValue& val2)
129  {
130  return !(operator> (val1, val2));
131  }
132 
134  inline bool operator>= (const PIPBitValue& val1, const PIPBitValue& val2)
135  {
136  return !(operator< (val1, val2));
137  }
138 
139 
141  typedef std::vector<PIPBitValue> PIPBitValues;
142 
143 }
144 
145 #endif