Much Better Now
[cs356-p1-elevator.git] / position.cpp
1 #include "position.hpp"
2
3 Position::Position ()
4         : major_(0)
5         , minor_(0)
6 {
7         // Intentionally Empty
8 }
9
10 Position::Position (int initial_position)
11         : major_(initial_position)
12         , minor_(0)
13 {
14         // Intentionally Empty
15 }
16
17 bool Position::operator== (const Position& rhs) const
18 {
19         return (major_ == rhs.major_) && (minor_ == rhs.minor_);
20 }
21
22 bool Position::operator!= (const Position& rhs) const
23 {
24         return ! (*this == rhs);
25 }
26
27 Position& Position::operator+= (const float rhs)
28 {
29         int major = (int)rhs;
30         int minor = (int)((rhs - major) * 10);
31
32         major_ += major;
33         minor_ += minor;
34
35         /* Check for overflow */
36         if (minor_ >= 10)
37         {
38                 major_ += 1;
39                 minor_ -= 10;
40         }
41
42         return *this;
43 }
44
45 Position& Position::operator-= (const float rhs)
46 {
47         *this += -rhs;
48
49         return *this;
50 }
51
52 bool Position::operator< (const Position& rhs) const
53 {
54         if (major_ < rhs.major_)
55                 return true;
56
57         if (major_ == rhs.major_)
58                 if (minor_ < rhs.minor_)
59                         return true;
60
61         return false;
62 }
63
64 bool Position::operator> (const Position& rhs) const
65 {
66         if (major_ > rhs.major_)
67                 return true;
68
69         if (major_ == rhs.major_)
70                 if (minor_ > rhs.minor_)
71                         return true;
72
73         return false;
74 }
75
76 Position Position::operator- (const Position& rhs) const
77 {
78         Position temp;
79
80         int major = major_ - rhs.major_;
81         int minor = minor_ - rhs.minor_;
82
83         /* Check for underflow */
84         if (minor < 0)
85         {
86                 minor += 10;
87                 major -= 1;
88         }
89
90         temp.major_ = major;
91         temp.minor_ = minor;
92
93         return temp;
94 }
95
96 Position::operator float() const
97 {
98         float temp;
99
100         temp = major_;
101         temp += minor_ / 10.0;
102
103         return temp;
104 }
105
106 std::ostream& operator<< (std::ostream& os, const Position& rhs)
107 {
108         os << "Position(" << rhs.major_ << "." << rhs.minor_ << ")";
109         return os;
110 }
111
112 /* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */