Remove bogus assert
[supertux.git] / src / math / size.hpp
1 //  SuperTux
2 //  Copyright (C) 2009 Ingo Ruhnke <grumbel@gmail.com>
3 //
4 //  This program is free software: you can redistribute it and/or modify
5 //  it under the terms of the GNU General Public License as published by
6 //  the Free Software Foundation, either version 3 of the License, or
7 //  (at your option) any later version.
8 //
9 //  This program is distributed in the hope that it will be useful,
10 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
11 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 //  GNU General Public License for more details.
13 //
14 //  You should have received a copy of the GNU General Public License
15 //  along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17 #ifndef HEADER_SUPERTUX_MATH_SIZE_HPP
18 #define HEADER_SUPERTUX_MATH_SIZE_HPP
19
20 #include <iosfwd>
21
22 class Sizef;
23
24 class Size
25 {
26 public:
27   Size() :
28     width(0),
29     height(0)
30   {}
31
32   Size(int width_, int height_) :
33     width(width_),
34     height(height_)
35   {}
36
37   Size(const Size& rhs) :
38     width(rhs.width),
39     height(rhs.height)
40   {}
41
42   explicit Size(const Sizef& rhs);
43
44   Size& operator*=(int factor)
45   {
46     width  *= factor;
47     height *= factor;
48     return *this;
49   }
50
51   Size& operator/=(int divisor)
52   {
53     width  /= divisor;
54     height /= divisor;
55     return *this;
56   }
57
58   Size& operator+=(const Size& rhs)
59   {
60     width  += rhs.width;
61     height += rhs.height;
62     return *this;
63   }
64
65   Size& operator-=(const Size& rhs)
66   {
67     width  -= rhs.width;
68     height -= rhs.height;
69     return *this;
70   }
71
72 public:
73   int width;
74   int height;
75 };
76
77 inline Size operator*(const Size& lhs, int factor)
78 {
79   return Size(lhs.width  * factor,
80               lhs.height * factor);
81 }
82
83 inline Size operator*(int factor, const Size& rhs)
84 {
85   return Size(rhs.width  * factor,
86               rhs.height * factor);
87 }
88
89 inline Size operator/(const Size& lhs, int divisor)
90 {
91   return Size(lhs.width  / divisor,
92               lhs.height / divisor);
93 }
94
95 inline Size operator+(const Size& lhs, const Size& rhs)
96 {
97   return Size(lhs.width  + rhs.width,
98               lhs.height + rhs.height);
99 }
100
101 inline Size operator-(const Size& lhs, const Size& rhs)
102 {
103   return Size(lhs.width  - rhs.width,
104               lhs.height - rhs.height);
105 }
106
107 inline bool operator==(const Size& lhs, const Size& rhs)
108 {
109   return (lhs.width == rhs.width) && (lhs.height == rhs.height);
110 }
111
112 inline bool operator!=(const Size& lhs, const Size& rhs)
113 {
114   return (lhs.width != rhs.width) || (lhs.height != rhs.height);
115 }
116
117 std::ostream& operator<<(std::ostream& s, const Size& size);
118
119 #endif