1 /***************************************************************************
2  * Brutal Chess
3  * http://brutalchess.sf.net
4  *
5  * File : boardposition.cpp
6  * Authors : Mike Cook, Joe Flint, Neil Pankey
7  **************************************************************************/
8 
9 #include "boardposition.h"
10 #include "board.h"
11 #include <iostream>
12 
BoardPosition(const char & file,const int & rank)13 BoardPosition::BoardPosition(const char & file, const int & rank)
14 : m_file0(file-'a'), m_rank0(rank-1)
15 {}
16 
17 
isValid() const18 bool BoardPosition::isValid() const
19 {
20 	return (m_file0 >= 0) && (m_rank0 >= 0) && (m_file0 < Board::BOARDSIZE) &&
21 				(m_rank0 < Board::BOARDSIZE);
22 }
23 
N() const24 const BoardPosition BoardPosition::N() const
25 {
26 	return BoardPosition(m_file0, m_rank0 + 1);
27 }
28 
NE() const29 const BoardPosition BoardPosition::NE() const
30 {
31 	return BoardPosition(m_file0 + 1, m_rank0 + 1);
32 }
33 
E() const34 const BoardPosition BoardPosition::E() const
35 {
36 	return BoardPosition(m_file0 + 1, m_rank0);
37 }
38 
SE() const39 const BoardPosition BoardPosition::SE() const
40 {
41 	return BoardPosition(m_file0 + 1, m_rank0 - 1);
42 }
43 
S() const44 const BoardPosition BoardPosition::S() const
45 {
46 	return BoardPosition(m_file0, m_rank0 - 1);
47 }
48 
SW() const49 const BoardPosition BoardPosition::SW() const
50 {
51 	return BoardPosition(m_file0 - 1, m_rank0 - 1);
52 }
53 
W() const54 const BoardPosition BoardPosition::W() const
55 {
56 	return BoardPosition(m_file0 - 1, m_rank0);
57 }
58 
NW() const59 const BoardPosition BoardPosition::NW() const
60 {
61 	return BoardPosition(m_file0 - 1, m_rank0 + 1);
62 }
63 
outN() const64 const bool BoardPosition::outN() const
65 {
66 	return (m_rank0 >= Board::BOARDSIZE);
67 }
68 
outNE() const69 const bool BoardPosition::outNE() const
70 {
71 	return (m_rank0 >= Board::BOARDSIZE || m_file0 >= Board::BOARDSIZE);
72 }
73 
outE() const74 const bool BoardPosition::outE() const
75 {
76 	return (m_file0 >= Board::BOARDSIZE);
77 }
78 
outSE() const79 const bool BoardPosition::outSE() const
80 {
81 	return (m_rank0 < 0 || m_file0 >= Board::BOARDSIZE);
82 }
83 
outS() const84 const bool BoardPosition::outS() const
85 {
86 	return (m_rank0 < 0);
87 }
88 
outSW() const89 const bool BoardPosition::outSW() const
90 {
91 	return (m_rank0 < 0 || m_file0 < 0);
92 }
93 
outW() const94 const bool BoardPosition::outW() const
95 {
96 	return (m_file0 < 0);
97 }
98 
outNW() const99 const bool BoardPosition::outNW() const
100 {
101 	return (m_rank0 >= Board::BOARDSIZE || m_file0 < 0);
102 }
103 
moveN()104 void BoardPosition::moveN()
105 {
106 	m_rank0++;
107 }
108 
moveNE()109 void BoardPosition::moveNE()
110 {
111 	m_rank0++;
112 	m_file0++;
113 }
114 
moveE()115 void BoardPosition::moveE()
116 {
117 	m_file0++;
118 }
119 
moveSE()120 void BoardPosition::moveSE()
121 {
122 	m_rank0--;
123 	m_file0++;
124 }
125 
moveS()126 void BoardPosition::moveS()
127 {
128 	m_rank0--;
129 }
130 
moveSW()131 void BoardPosition::moveSW()
132 {
133 	m_rank0--;
134 	m_file0--;
135 }
136 
moveW()137 void BoardPosition::moveW()
138 {
139 	m_file0--;
140 }
141 
moveNW()142 void BoardPosition::moveNW()
143 {
144 	m_rank0++;
145 	m_file0--;
146 }
147 
operator ==(const BoardPosition & bp1,const BoardPosition & bp2)148 bool operator== (const BoardPosition& bp1, const BoardPosition& bp2)
149 {
150 	return (bp1.m_file0 == bp2.m_file0) && (bp1.m_rank0 == bp2.m_rank0);
151 }
152 
operator !=(const BoardPosition & bp1,const BoardPosition & bp2)153 bool operator!= (const BoardPosition& bp1, const BoardPosition& bp2)
154 {
155 	return (bp1.m_file0 != bp2.m_file0) || (bp1.m_rank0 != bp2.m_rank0);
156 }
157 
operator <<(std::ostream & os,const BoardPosition & bp)158 std::ostream& operator<< (std::ostream& os, const BoardPosition & bp)
159 {
160 	os << (char)(bp.m_file0+'a') << bp.m_rank0+1;
161 	return os;
162 }
163 
164 // End of file boardposition.cpp
165