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
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef _GEAR_TOOLS_HH_
00045 #define _GEAR_TOOLS_HH_
00046
00047 #include <math.h>
00048 #include "diffapp.hh"
00049
00050 #define FAIL -1
00051 #define INITIAL_HEURISTIC_VALUE -1
00052 #define FORWARD_TABLE_SIZE 100
00053 #define LEARNED_COST_TABLE_SIZE 1000
00054
00055 #define GEO_HEURISTIC_VALUE_UPDATE_THRESHOLD 2
00056
00057 #define ABS(x) ((x) >= 0 ? (x): -(x))
00058
00059 class HeuristicValue {
00060 public:
00061 HeuristicValue(double dst_longitude, double dst_latitude,
00062 double heuristic_value) : dst_longitude_(dst_longitude),
00063 dst_latitude_(dst_latitude),
00064 heuristic_value_(heuristic_value)
00065 {};
00066
00067 double dst_longitude_;
00068 double dst_latitude_;
00069 double heuristic_value_;
00070 };
00071
00072 class GeoLocation {
00073 public:
00074 void operator= (GeoLocation loc)
00075 {
00076 longitude_ = loc.longitude_;
00077 latitude_ = loc.latitude_;
00078 }
00079 void output()
00080 {
00081 DiffPrint(DEBUG_IMPORTANT, "(%f, %f)", longitude_, latitude_ );
00082 }
00083
00084 double longitude_;
00085 double latitude_;
00086 };
00087
00088 class HeuristicValueEntry {
00089 public:
00090 HeuristicValueEntry() {
00091 heuristic_value_ = INITIAL_HEURISTIC_VALUE;
00092 }
00093
00094 GeoLocation dst_;
00095 double heuristic_value_;
00096 };
00097
00098 class LearnedCostEntry {
00099 public:
00100 LearnedCostEntry() {
00101 learned_cost_value_ = INITIAL_HEURISTIC_VALUE;
00102 }
00103
00104 int node_id_;
00105 GeoLocation dst_;
00106 double learned_cost_value_;
00107 };
00108
00109
00110 class HeuristicValueTable {
00111 public:
00112 HeuristicValueTable() {num_entries_ = 0; first_ = -1; last_ = -1;}
00113
00114 HeuristicValueEntry table_[FORWARD_TABLE_SIZE];
00115
00116 int retrieveEntry(GeoLocation *dst);
00117 inline int numEntries() {return num_entries_;}
00118
00119 void addEntry(GeoLocation dst, double heuristic_value);
00120 bool updateEntry(GeoLocation dst, double heuristic_value);
00121
00122
00123
00124
00125 int next(int i) {return ((i+1) % FORWARD_TABLE_SIZE);}
00126 int last() {return last_;}
00127
00128 private:
00129 int num_entries_;
00130 int first_;
00131 int last_;
00132 };
00133
00134
00135 class LearnedCostTable {
00136 public:
00137 LearnedCostTable() {num_entries_ = 0; first_ = -1; last_ = -1;}
00138
00139 LearnedCostEntry table_[LEARNED_COST_TABLE_SIZE];
00140
00141 int retrieveEntry(int neighbor_id, GeoLocation *dst);
00142 inline int numEntries() {return num_entries_;}
00143
00144 void addEntry(int neighbor_id, GeoLocation dst, double learned_cost);
00145 void updateEntry(int neighbor_id, GeoLocation dst, double learned_cost);
00146 int next(int i) {return ((i+1) % LEARNED_COST_TABLE_SIZE);}
00147 int last() {return last_;}
00148
00149 private:
00150 int num_entries_;
00151 int first_;
00152 int last_;
00153 };
00154
00155 double Distance(double long1, double lat1, double long2, double lat2);
00156 bool IsSameLocation(GeoLocation src, GeoLocation dst);
00157
00158 #endif // !_GEAR_TOOLS_HH_