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}