00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef __KEY_H_
00030 #define __KEY_H_
00031
00032 #define KEY_SIZE 2
00033
00034 #define INFINITECOST 1000000000
00035
00036 class CKey
00037 {
00038
00039 public:
00040 long int key[KEY_SIZE];
00041
00042
00043 public:
00044 CKey(){
00045
00046 #if KEY_SIZE == 1
00047 key[0] = 0;
00048 #elif KEY_SIZE == 2
00049 key[0] = 0; key[1] = 0;
00050 #else
00051 for(int i = 0; i < KEY_SIZE; i++)
00052 {
00053 key[i] = 0;
00054 }
00055 #endif
00056 };
00057 ~CKey(){};
00058
00059
00060 public:
00061 void SetKeytoInfinity()
00062 {
00063 for(int i = 0; i < KEY_SIZE; i++)
00064 {
00065 key[i] = INFINITECOST;
00066 }
00067 };
00068 void SetKeytoZero()
00069 {
00070 for(int i = 0; i < KEY_SIZE; i++)
00071 {
00072 key[i] = 0;
00073 }
00074 };
00075
00076
00077
00078
00079 public:
00080
00081 void operator = (CKey RHSKey)
00082 {
00083
00084
00085
00086 #if KEY_SIZE == 1
00087 key[0] = RHSKey.key[0];
00088 #elif KEY_SIZE == 2
00089 key[0] = RHSKey.key[0]; key[1] = RHSKey.key[1];
00090 #else
00091 for(int i = 0; i < KEY_SIZE; i++)
00092 key[i] = RHSKey.key[i];
00093 #endif
00094
00095 };
00096
00097 CKey operator - (const CKey& RHSKey) const
00098 {
00099 CKey RetKey;
00100
00101
00102
00103 for(int i = 0; i < KEY_SIZE; i++)
00104 RetKey.key[i] = key[i] - RHSKey.key[i];
00105
00106 return RetKey;
00107 };
00108
00109
00110 bool operator > (CKey& RHSKey)
00111 {
00112
00113
00114
00115 #if KEY_SIZE == 1
00116 return (key[0] > RHSKey.key[0]);
00117 #elif KEY_SIZE == 2
00118 return (key[0] > RHSKey.key[0] || (key[0] == RHSKey.key[0] && key[1] > RHSKey.key[1]));
00119 #else
00120 for(int i = 0; i < KEY_SIZE; i++)
00121 {
00122
00123 if(key[i] > RHSKey.key[i])
00124 return true;
00125 else if(key[i] < RHSKey.key[i])
00126 return false;
00127 }
00128
00129 return false;
00130 #endif
00131
00132 };
00133
00134 bool operator == (CKey& RHSKey)
00135 {
00136
00137
00138
00139 #if KEY_SIZE == 1
00140 return (key[0] == RHSKey.key[0]);
00141 #elif KEY_SIZE == 2
00142 return (key[0] == RHSKey.key[0] && key[1] == RHSKey.key[1]);
00143 #else
00144
00145 for(int i = 0; i < KEY_SIZE; i++)
00146 {
00147
00148 if(key[i] != RHSKey.key[i])
00149 return false;
00150 }
00151
00152
00153 return true;
00154 #endif
00155
00156 };
00157
00158 bool operator != (CKey& RHSKey)
00159 {
00160 return !(*this == RHSKey);
00161 };
00162
00163 bool operator < (CKey& RHSKey)
00164 {
00165
00166
00167
00168 #if KEY_SIZE == 1
00169 return (key[0] < RHSKey.key[0]);
00170 #elif KEY_SIZE == 2
00171 return (key[0] < RHSKey.key[0] || (key[0] == RHSKey.key[0] && key[1] < RHSKey.key[1]));
00172 #else
00173 for(int i = 0; i < KEY_SIZE; i++)
00174 {
00175
00176 if(key[i] < RHSKey.key[i])
00177 return true;
00178 else if(key[i] > RHSKey.key[i])
00179 return false;
00180 }
00181
00182 return false;
00183 #endif
00184
00185 };
00186
00187 bool operator >= (CKey& RHSKey)
00188 {
00189 return !(*this < RHSKey);
00190 };
00191
00192 bool operator <= (CKey& RHSKey)
00193 {
00194 return !(*this > RHSKey);
00195 };
00196
00197 long int operator [] (int i)
00198 {
00199 return key[i];
00200 };
00201
00202 };
00203
00204
00205
00206 #endif