-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathPosition.cpp
More file actions
103 lines (89 loc) · 2.67 KB
/
Copy pathPosition.cpp
File metadata and controls
103 lines (89 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//------------------------------------------------------------------------------
// Position.cpp
//
// Group: Group 11591, study assistant Thomas Neff
//
// Authors: Benjamin Franz Herbert Rauch 1431077
// Peter Lorenz 1114658
// Rene Hasenburger 1432147
//------------------------------------------------------------------------------
//
#include "Position.h"
#include <sstream>
const Position Position::INVALID = Position(65, 65);
//------------------------------------------------------------------------------
Position::Position() : x_(0), y_(0)
{
}
//------------------------------------------------------------------------------
Position::Position(int x, int y) : x_(x), y_(y)
{
}
//------------------------------------------------------------------------------
Position::Position(const Position &orig) : x_(orig.getX()), y_(orig.getY())
{
}
//------------------------------------------------------------------------------
Position::~Position()
{
}
//------------------------------------------------------------------------------
int Position::getX() const
{
return x_;
}
//------------------------------------------------------------------------------
int Position::getY() const
{
return y_;
}
//------------------------------------------------------------------------------
bool Position::operator==(const Position &other)
{
return (other.x_ == x_) && (other.y_ == y_);
}
//------------------------------------------------------------------------------
bool Position::operator!=(const Position &other)
{
return !(*this == other);
}
//------------------------------------------------------------------------------
bool Position::operator<(const Position &other)
{
//y =0-126
//x =0-126
int this_val = (y_ + 63) * 127 + (x_ + 63);
int other_val = ((other.getY() + 63) * 127 + (other.getX() * 63));
return (this_val < other_val);
}
//------------------------------------------------------------------------------
Position::operator bool() const
{
return x_ < 64 && y_ < 64;
}
//------------------------------------------------------------------------------
bool Position::parse(std::string input)
{
//preserve
int x_preserve = x_;
int y_prexerve = y_;
std::istringstream is(input);
char open_bracket;
char close_bracket;
char comma;
std::string s;
is >> open_bracket >> x_ >> comma >> y_ >> close_bracket >> s;
if (open_bracket == '(' && close_bracket == ')' && comma == ',' && s == "")
return true;
//restore
x_ = x_preserve;
y_ = y_prexerve;
return false;
}
//------------------------------------------------------------------------------
std::string Position::toString() const
{
std::ostringstream os;
os << "(" << x_ << "," << y_ << ")";
return os.str();
}