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
|
#ifndef SOURCETOOLS_COLLECTION_POSITION_H
#define SOURCETOOLS_COLLECTION_POSITION_H
#include <ostream>
#include <cstddef>
namespace sourcetools {
namespace collections {
struct Position
{
Position()
: row(0), column(0)
{
}
Position(std::size_t row, std::size_t column)
: row(row), column(column)
{
}
friend std::ostream& operator<<(std::ostream& os,
const Position& position)
{
os << position.row << ":" << position.column;
return os;
}
friend bool operator <(const Position& lhs, const Position& rhs)
{
return
lhs.row < rhs.row ||
(lhs.row == rhs.row && lhs.column < rhs.column);
}
friend bool operator <=(const Position& lhs, const Position& rhs)
{
return
lhs.row < rhs.row ||
(lhs.row == rhs.row && lhs.column <= rhs.column);
}
friend bool operator ==(const Position& lhs, const Position& rhs)
{
return
lhs.row == rhs.row &&
lhs.column == rhs.column;
}
friend bool operator >(const Position& lhs, const Position& rhs)
{
return
lhs.row > rhs.row ||
(lhs.row == rhs.row && lhs.column > rhs.column);
}
friend bool operator >=(const Position& lhs, const Position& rhs)
{
return
lhs.row > rhs.row ||
(lhs.row == rhs.row && lhs.column >= rhs.column);
}
friend Position operator +(const Position& lhs, std::size_t rhs)
{
return Position(lhs.row, lhs.column + rhs);
}
std::size_t row;
std::size_t column;
};
} // namespace collections
} // namespace sourcetools
#endif /* SOURCETOOLS_COLLECTION_POSITION_H */
|