gear_tools.hh
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:5k
源码类别:

通讯编程

开发平台:

Visual C++

  1. //
  2. // gear_tools.hh  : GEAR Tools Include File
  3. // authors        : Yan Yu and Fabio Silva
  4. //
  5. // Copyright (C) 2000-2002 by the University of Southern California
  6. // Copyright (C) 2000-2002 by the University of California
  7. // $Id: gear_tools.hh,v 1.2 2005/09/13 04:53:48 tomh Exp $
  8. //
  9. // This program is free software; you can redistribute it and/or
  10. // modify it under the terms of the GNU General Public License,
  11. // version 2, as published by the Free Software Foundation.
  12. //
  13. // This program is distributed in the hope that it will be useful,
  14. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. // GNU General Public License for more details.
  17. //
  18. // You should have received a copy of the GNU General Public License along
  19. // with this program; if not, write to the Free Software Foundation, Inc.,
  20. // 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  21. //
  22. // Linking this file statically or dynamically with other modules is making
  23. // a combined work based on this file.  Thus, the terms and conditions of
  24. // the GNU General Public License cover the whole combination.
  25. //
  26. // In addition, as a special exception, the copyright holders of this file
  27. // give you permission to combine this file with free software programs or
  28. // libraries that are released under the GNU LGPL and with code included in
  29. // the standard release of ns-2 under the Apache 2.0 license or under
  30. // otherwise-compatible licenses with advertising requirements (or modified
  31. // versions of such code, with unchanged license).  You may copy and
  32. // distribute such a system following the terms of the GNU GPL for this
  33. // file and the licenses of the other code concerned, provided that you
  34. // include the source code of that other code when and as the GNU GPL
  35. // requires distribution of source code.
  36. //
  37. // Note that people who make modified versions of this file are not
  38. // obligated to grant this special exception for their modified versions;
  39. // it is their choice whether to do so.  The GNU General Public License
  40. // gives permission to release a modified version without this exception;
  41. // this exception also makes it possible to release a modified version
  42. // which carries forward this exception.
  43. #ifndef _GEAR_TOOLS_HH_
  44. #define _GEAR_TOOLS_HH_
  45. #include <math.h>
  46. #include "diffapp.hh"
  47. #define FAIL                      -1
  48. #define INITIAL_HEURISTIC_VALUE   -1
  49. #define FORWARD_TABLE_SIZE        100
  50. #define LEARNED_COST_TABLE_SIZE   1000
  51. #define GEO_HEURISTIC_VALUE_UPDATE_THRESHOLD 2
  52. #define ABS(x)          ((x) >= 0 ? (x): -(x))
  53. class HeuristicValue {
  54. public:
  55.   HeuristicValue(double dst_longitude, double dst_latitude,
  56.  double heuristic_value) : dst_longitude_(dst_longitude),
  57.    dst_latitude_(dst_latitude),
  58.    heuristic_value_(heuristic_value)
  59.   {};
  60.   double dst_longitude_;
  61.   double dst_latitude_;
  62.   double heuristic_value_;
  63. };
  64. class GeoLocation {
  65. public:
  66.   void operator= (GeoLocation loc)
  67.   {
  68.     longitude_ = loc.longitude_;
  69.     latitude_ = loc.latitude_;
  70.   }
  71.   void output()
  72.   {
  73.     DiffPrint(DEBUG_IMPORTANT, "(%f, %f)", longitude_, latitude_ );
  74.   }
  75.   double longitude_;
  76.   double latitude_;
  77. };
  78. class HeuristicValueEntry {
  79. public:
  80.   HeuristicValueEntry() {
  81.     heuristic_value_ = INITIAL_HEURISTIC_VALUE;
  82.   }
  83.   GeoLocation dst_;
  84.   double heuristic_value_;
  85. };
  86. class LearnedCostEntry {
  87. public:
  88.   LearnedCostEntry() {
  89.     learned_cost_value_ = INITIAL_HEURISTIC_VALUE;
  90.   }
  91.   int node_id_;
  92.   GeoLocation dst_;
  93.   double learned_cost_value_;
  94. };
  95. //local forwarding table at each node
  96. class HeuristicValueTable {
  97. public:
  98.   HeuristicValueTable() {num_entries_ = 0; first_ = -1; last_ = -1;}
  99.   HeuristicValueEntry table_[FORWARD_TABLE_SIZE];
  100.   int retrieveEntry(GeoLocation  *dst);
  101.   inline int numEntries() {return num_entries_;}
  102.   void addEntry(GeoLocation dst, double heuristic_value);
  103.   bool updateEntry(GeoLocation dst, double heuristic_value);
  104.   //the return value of UpdateEntry is if there is significant change
  105.   //compared to its old value, if there is(i.e., either the change
  106.   //pass some threshold-GEO_H_VALUE_UPDATE_THRE or it is a new entry),
  107.   //then return TRUE, o/w return FALSE;
  108.   int next(int i) {return ((i+1) % FORWARD_TABLE_SIZE);}
  109.   int last() {return last_;}
  110. private:
  111.   int num_entries_;
  112.   int first_;
  113.   int last_;
  114. };
  115. // Local forwarding table
  116. class LearnedCostTable {
  117. public:
  118.   LearnedCostTable() {num_entries_ = 0; first_ = -1; last_ = -1;}
  119.   LearnedCostEntry table_[LEARNED_COST_TABLE_SIZE];
  120.   int retrieveEntry(int neighbor_id, GeoLocation *dst);
  121.   inline int numEntries() {return num_entries_;}
  122.   void addEntry(int neighbor_id, GeoLocation dst, double learned_cost);
  123.   void updateEntry(int neighbor_id, GeoLocation dst, double learned_cost);
  124.   int next(int i) {return ((i+1) % LEARNED_COST_TABLE_SIZE);}
  125.   int last() {return last_;}
  126. private:
  127.   int num_entries_;
  128.   int first_;
  129.   int last_;
  130. };
  131. double Distance(double long1, double lat1, double long2, double lat2);
  132. bool IsSameLocation(GeoLocation src, GeoLocation dst);
  133. #endif // !_GEAR_TOOLS_HH_