main
1using System;
2using System.Globalization;
3
4namespace mars.rover.domain
5{
6 public class Coordinate : IEquatable<Coordinate>, IComparable<Coordinate>
7 {
8 uint coordinate;
9
10 public Coordinate(uint coordinate)
11 {
12 this.coordinate = coordinate;
13 }
14
15 public virtual void increment()
16 {
17 coordinate++;
18 }
19
20 public virtual void decrement()
21 {
22 coordinate--;
23 }
24
25 public virtual Coordinate plus(uint other)
26 {
27 return new Coordinate(coordinate + other);
28 }
29
30 public virtual Coordinate minus(uint other)
31 {
32 return new Coordinate(coordinate - other);
33 }
34
35 static public implicit operator Coordinate(uint coordinate)
36 {
37 return new Coordinate(coordinate);
38 }
39
40 static public implicit operator uint(Coordinate coordinate)
41 {
42 return coordinate.coordinate;
43 }
44
45 public virtual int CompareTo(Coordinate other)
46 {
47 return coordinate.CompareTo(other.coordinate);
48 }
49
50 public bool Equals(Coordinate other)
51 {
52 if (ReferenceEquals(null, other)) return false;
53 if (ReferenceEquals(this, other)) return true;
54 return other.coordinate == coordinate;
55 }
56
57 public override bool Equals(object obj)
58 {
59 if (ReferenceEquals(null, obj)) return false;
60 if (ReferenceEquals(this, obj)) return true;
61 if (obj.GetType() != typeof (Coordinate)) return false;
62 return Equals((Coordinate) obj);
63 }
64
65 public override int GetHashCode()
66 {
67 return coordinate.GetHashCode();
68 }
69
70 public override string ToString()
71 {
72 return coordinate.ToString(CultureInfo.InvariantCulture);
73 }
74 }
75}