MySQL++  3.3.0
tiny_int.h
Go to the documentation of this file.
1 
4 /***********************************************************************
5  Copyright (c) 1998 by Kevin Atkinson, (c) 1999-2001 by MySQL AB, and
6  (c) 2004-2007 by Educational Technology Resources, Inc. Others may
7  also hold copyrights on code in this file. See the CREDITS.txt file
8  in the top directory of the distribution for details.
9 
10  This file is part of MySQL++.
11 
12  MySQL++ is free software; you can redistribute it and/or modify it
13  under the terms of the GNU Lesser General Public License as published
14  by the Free Software Foundation; either version 2.1 of the License, or
15  (at your option) any later version.
16 
17  MySQL++ is distributed in the hope that it will be useful, but WITHOUT
18  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
19  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
20  License for more details.
21 
22  You should have received a copy of the GNU Lesser General Public
23  License along with MySQL++; if not, write to the Free Software
24  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301
25  USA
26 ***********************************************************************/
27 
28 #if !defined(MYSQLPP_TINY_INT_H)
29 #define MYSQLPP_TINY_INT_H
30 
31 #include "common.h"
32 
33 #include <ostream>
34 
35 namespace mysqlpp {
36 
53 
54 template <typename VT = signed char>
55 class tiny_int
56 {
57 public:
60  typedef VT value_type;
61 
65  tiny_int() { }
66 
70  value_(value_type(v))
71  {
72  }
73 
75  operator bool() const
76  {
77  return value_;
78  }
79 
81  operator int() const
82  {
83  return static_cast<int>(value_);
84  }
85 
87  operator value_type() const
88  {
89  return value_;
90  }
91 
94  {
95  value_ = static_cast<value_type>(v);
96  return *this;
97  }
98 
101  {
102  value_ += static_cast<value_type>(v);
103  return *this;
104  }
105 
108  {
109  value_ -= static_cast<value_type>(v);
110  return *this;
111  }
112 
115  {
116  value_ *= static_cast<value_type>(v);
117  return *this;
118  }
119 
122  {
123  value_ /= static_cast<value_type>(v);
124  return *this;
125  }
126 
130  {
131  value_ %= static_cast<value_type>(v);
132  return *this;
133  }
134 
137  {
138  value_ &= static_cast<value_type>(v);
139  return *this;
140  }
141 
144  {
145  value_ |= static_cast<value_type>(v);
146  return *this;
147  }
148 
151  {
152  value_ ^= static_cast<value_type>(v);
153  return *this;
154  }
155 
158  {
159  value_ <<= static_cast<value_type>(v);
160  return *this;
161  }
162 
165  {
166  value_ >>= static_cast<value_type>(v);
167  return *this;
168  }
169 
172  {
173  ++value_;
174  return *this;
175  }
176 
179  {
180  --value_;
181  return *this;
182  }
183 
186  {
187  this_type tmp = value_;
188  ++value_;
189  return tmp;
190  }
191 
195  {
196  this_type tmp = value_;
197  --value_;
198  return tmp;
199  }
200 
203  {
204  return value_ - i.value_;
205  }
206 
209  {
210  return value_ + i.value_;
211  }
212 
215  {
216  return value_ * i.value_;
217  }
218 
221  {
222  return value_ / i.value_;
223  }
224 
227  {
228  return value_ % i.value_;
229  }
230 
233  {
234  return value_ | i.value_;
235  }
236 
239  {
240  return value_ & i.value_;
241  }
242 
245  {
246  return value_ ^ i.value_;
247  }
248 
251  {
252  return value_ << i.value_;
253  }
254 
257  {
258  return value_ >> i.value_;
259  }
260 
262  bool operator ==(const this_type& i) const
263  {
264  return value_ == i.value_;
265  }
266 
268  bool operator !=(const this_type& i) const
269  {
270  return value_ != i.value_;
271  }
272 
274  bool operator <(const this_type& i) const
275  {
276  return value_ < i.value_;
277  }
278 
280  bool operator >(const this_type& i) const
281  {
282  return value_ > i.value_;
283  }
284 
286  bool operator <=(const this_type& i) const
287  {
288  return value_ <= i.value_;
289  }
290 
292  bool operator >=(const this_type& i) const
293  {
294  return value_ >= i.value_;
295  }
296 
297 private:
298  value_type value_;
299 };
300 
302 template <typename VT>
303 std::ostream& operator <<(std::ostream& os, tiny_int<VT> i)
304 {
305  os << static_cast<int>(i);
306  return os;
307 }
308 
309 } // end namespace mysqlpp
310 
311 #endif
Class for holding an SQL TINYINT value.
Definition: tiny_int.h:56
bool operator>=(const this_type &i) const
Check this object is greater than or equal to another.
Definition: tiny_int.h:292
this_type operator+(const this_type &i) const
Return this value plus i.
Definition: tiny_int.h:208
this_type operator/(const this_type &i) const
Return this value divided by i.
Definition: tiny_int.h:220
bool operator>(const this_type &i) const
Check that this object is greater than another.
Definition: tiny_int.h:280
this_type & operator>>=(int v)
Shift this value right by v positions.
Definition: tiny_int.h:164
this_type & operator/=(int v)
Divide this value by another object.
Definition: tiny_int.h:121
this_type & operator&=(int v)
Bitwise AND this value by another value.
Definition: tiny_int.h:136
this_type & operator<<=(int v)
Shift this value left by v positions.
Definition: tiny_int.h:157
tiny_int()
Default constructor.
Definition: tiny_int.h:65
bool operator<(const this_type &i) const
Check that this object is less than another.
Definition: tiny_int.h:274
this_type & operator+=(int v)
Add another value to this object.
Definition: tiny_int.h:100
VT value_type
alias for type of internal value
Definition: tiny_int.h:60
tiny_int(value_type v)
Create object from any integral type that can be converted to a short int.
Definition: tiny_int.h:69
this_type operator|(const this_type &i) const
Return this value bitwise OR'd by i.
Definition: tiny_int.h:232
bool operator<=(const this_type &i) const
Check this object is less than or equal to another.
Definition: tiny_int.h:286
this_type operator-(const this_type &i) const
Return this value minus i.
Definition: tiny_int.h:202
this_type operator*(const this_type &i) const
Return this value multiplied by i.
Definition: tiny_int.h:214
this_type & operator--()
Subtract one from this value and return that value.
Definition: tiny_int.h:178
this_type & operator|=(int v)
Bitwise OR this value by another value.
Definition: tiny_int.h:143
bool operator==(const this_type &i) const
Check for equality.
Definition: tiny_int.h:262
tiny_int< VT > this_type
alias for this object's type
Definition: tiny_int.h:59
bool operator!=(const this_type &i) const
Check for inequality.
Definition: tiny_int.h:268
this_type & operator*=(int v)
Multiply this value by another object.
Definition: tiny_int.h:114
this_type operator>>(const this_type &i) const
Return this value bitwise shifted right by i.
Definition: tiny_int.h:256
this_type & operator%=(int v)
Divide this value by another object and store the remainder.
Definition: tiny_int.h:129
this_type & operator++()
Add one to this value and return that value.
Definition: tiny_int.h:171
this_type operator&(const this_type &i) const
Return this value bitwise AND'd by i.
Definition: tiny_int.h:238
this_type operator<<(const this_type &i) const
Return this value bitwise shifted left by i.
Definition: tiny_int.h:250
this_type & operator=(int v)
Assign a new value to the object.
Definition: tiny_int.h:93
this_type operator^(const this_type &i) const
Return this value bitwise XOR'd by i.
Definition: tiny_int.h:244
this_type & operator-=(int v)
Subtract another value to this object.
Definition: tiny_int.h:107
this_type operator%(const this_type &i) const
Return the modulus of this value divided by i.
Definition: tiny_int.h:226
this_type & operator^=(int v)
Bitwise XOR this value by another value.
Definition: tiny_int.h:150
This file includes top-level definitions for use both internal to the library, and outside it....