Mercurial > silverbladetech
comparison MetroWpf/Stocks.Common/Models/Price.cs @ 20:6109bc268b90
Latest
author | adminsh@apollo |
---|---|
date | Tue, 20 Mar 2012 13:37:46 +0000 |
parents | |
children | dfc81f8bb838 |
comparison
equal
deleted
inserted
replaced
19:09d18d6e5f40 | 20:6109bc268b90 |
---|---|
1 using Stocks.Common.Core; | |
2 using System.Collections; | |
3 using System; | |
4 using System.Collections.Generic; | |
5 | |
6 namespace Stocks.Common.Models | |
7 { | |
8 public class Price : IEquatable<Price>, IComparable<Price>, IComparable | |
9 { | |
10 public string Symbol { get; set; } | |
11 public decimal CurrentPrice { get; set; } | |
12 public decimal PreviousPrice { get; set; } | |
13 | |
14 public Price() | |
15 { | |
16 } | |
17 | |
18 public Price(string symbol, decimal currentPrice, decimal previousPrice) | |
19 : this() | |
20 { | |
21 Symbol = symbol; | |
22 CurrentPrice = currentPrice; | |
23 PreviousPrice = previousPrice; | |
24 } | |
25 | |
26 public override bool Equals(object obj) | |
27 { | |
28 if (obj is Price) | |
29 return Equals(obj as Price); | |
30 else | |
31 return false; | |
32 } | |
33 | |
34 public bool Equals(Price other) | |
35 { | |
36 return (Symbol == other.Symbol | |
37 && CurrentPrice == other.CurrentPrice | |
38 && PreviousPrice == other.PreviousPrice); | |
39 } | |
40 | |
41 public int CompareTo(Price other) | |
42 { | |
43 return Symbol.CompareTo(other.Symbol); | |
44 } | |
45 | |
46 public int CompareTo(Price other, PriceComparisonType comparisonType) | |
47 { | |
48 switch (comparisonType) | |
49 { | |
50 case PriceComparisonType.NotSet: | |
51 case PriceComparisonType.Symbol: | |
52 return Symbol.CompareTo(other.Symbol); | |
53 case PriceComparisonType.CurrentPrice: | |
54 return CurrentPrice.CompareTo(other.CurrentPrice); | |
55 case PriceComparisonType.PreviousPrice: | |
56 return PreviousPrice.CompareTo(other.PreviousPrice); | |
57 default: | |
58 throw new Exception("Unknown comparison type"); | |
59 } | |
60 } | |
61 | |
62 public int CompareTo(object obj) | |
63 { | |
64 Price other; | |
65 if (obj is Price) | |
66 other = obj as Price; | |
67 else | |
68 throw new ArgumentException("obj is not a Price"); | |
69 | |
70 return CompareTo(other); | |
71 } | |
72 public override int GetHashCode() | |
73 { | |
74 int hash = 13; | |
75 hash = (hash * 7) + Symbol.GetHashCode(); | |
76 hash = (hash * 7) + CurrentPrice.GetHashCode(); | |
77 hash = (hash * 7) + PreviousPrice.GetHashCode(); | |
78 return hash; | |
79 } | |
80 | |
81 public static bool operator ==(Price lhs, Price rhs) | |
82 { | |
83 if (System.Object.ReferenceEquals(lhs, rhs)) | |
84 return true; | |
85 | |
86 if (((object)lhs == null) || ((object)rhs == null)) | |
87 return false; | |
88 | |
89 return lhs.Symbol == rhs.Symbol | |
90 && lhs.CurrentPrice == rhs.CurrentPrice | |
91 && lhs.PreviousPrice == rhs.PreviousPrice; | |
92 } | |
93 | |
94 public static bool operator !=(Price lhs, Price rhs) | |
95 { | |
96 return !(lhs == rhs); | |
97 } | |
98 | |
99 | |
100 public class PriceComparer : IComparer<Price>, IComparer | |
101 { | |
102 public PriceComparisonType ComparisonMethod { get; set; } | |
103 | |
104 public int Compare(Price x, Price y) | |
105 { | |
106 return x.CompareTo(y, ComparisonMethod); | |
107 } | |
108 | |
109 public int Compare(object x, object y) | |
110 { | |
111 Price lhs, rhs; | |
112 | |
113 if (x is Price) | |
114 lhs = x as Price; | |
115 else | |
116 throw new ArgumentException("x is not a Price"); | |
117 | |
118 if (y is Price) | |
119 rhs = y as Price; | |
120 else | |
121 throw new ArgumentException("y is not a Price"); | |
122 | |
123 return lhs.CompareTo(rhs, ComparisonMethod); | |
124 } | |
125 } | |
126 } | |
127 | |
128 public enum PriceComparisonType { NotSet = 0, Symbol, CurrentPrice, PreviousPrice } | |
129 } |