BUGFIX: Elevators did not handle Requests in the correct order
[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         int major = (int)rhs;
48         int minor = (int)((rhs - major) * 10);
49
50         major_ -= major;
51         minor_ -= minor;
52
53         /* Check for underflow */
54         if (minor_ < 0)
55         {
56                 major_ -= 1;
57                 minor_ += 10;
58         }
59
60         return *this;
61 }
62
63 bool Position::operator< (const Position& rhs) const
64 {
65         if (major_ < rhs.major_)
66                 return true;
67
68         if (major_ == rhs.major_)
69                 if (minor_ < rhs.minor_)
70                         return true;
71
72         return false;
73 }
74
75 bool Position::operator> (const Position& rhs) const
76 {
77         if (major_ > rhs.major_)
78                 return true;
79
80         if (major_ == rhs.major_)
81                 if (minor_ > rhs.minor_)
82                         return true;
83
84         return false;
85 }
86
87 Position Position::operator- (const Position& rhs) const
88 {
89         Position temp;
90
91         int major = major_ - rhs.major_;
92         int minor = minor_ - rhs.minor_;
93
94         /* Check for underflow */
95         if (minor < 0)
96         {
97                 minor += 10;
98                 major -= 1;
99         }
100
101         temp.major_ = major;
102         temp.minor_ = minor;
103
104         return temp;
105 }
106
107 Position::operator float() const
108 {
109         float temp;
110
111         temp = major_;
112         temp += minor_ / 10.0;
113
114         return temp;
115 }
116
117 Position::operator int() const
118 {
119         return major_;
120 }
121
122 std::ostream& operator<< (std::ostream& os, const Position& rhs)
123 {
124         os << "Position(" << rhs.major_ << "." << rhs.minor_ << ")";
125         return os;
126 }
127
128 /* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */