Experimental Changes
[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)
18 {
19         return (_major == rhs._major) && (_minor == rhs._minor);
20 }
21
22
23 bool Position::operator== (const int rhs)
24 {
25         return (_major == rhs) && (_minor == 0);
26 }
27
28 Position& Position::operator+= (const float rhs)
29 {
30         int major = (int)rhs;
31         int minor = (int)((rhs - major) * 10);
32
33         _major += major;
34         _minor += minor;
35
36         /* Check for overflow */
37         if (_minor >= 10)
38         {
39                 _major += 1;
40                 _minor -= 10;
41         }
42
43         return *this;
44 }
45
46 Position& Position::operator-= (const float rhs)
47 {
48         *this += -rhs;
49
50         return *this;
51 }
52
53 bool Position::operator< (const Position& rhs)
54 {
55         if (_major < rhs._major)
56                 return true;
57
58         if (_major == rhs._major)
59                 if (_minor < rhs._minor)
60                         return true;
61
62         return false;
63 }
64
65 bool Position::operator> (const Position& rhs)
66 {
67         if (_major > rhs._major)
68                 return true;
69
70         if (_major == rhs._major)
71                 if (_minor > rhs._minor)
72                         return true;
73
74         return false;
75 }
76
77 std::ostream& operator<< (std::ostream& os, Position& rhs)
78 {
79         os << "Position: " << rhs._major << "." << rhs._minor;
80         return os;
81 }
82
83
84 /* vim: set ts=4 sts=4 sw=4 noexpandtab textwidth=112: */