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

通讯编程

开发平台:

Visual C++

  1. #ifndef __setdest_h__
  2. #define __setdest_h__
  3. /*#include <sys/queue.h>*/
  4. #include "../../../config.h"
  5. #include "../../../lib/bsd-list.h"
  6. #ifndef LIST_FIRST
  7. #define LIST_FIRST(head) ((head)->lh_first)
  8. #endif
  9. #ifndef LIST_NEXT
  10. #define LIST_NEXT(elm, field) ((elm)->field.le_next)
  11. #endif
  12. void ReadInMovementPattern(void);
  13. class vector {
  14. public:
  15. vector(double x = 0.0, double y = 0.0, double z = 0.0) {
  16. X = x; Y = y; Z = z;
  17. }
  18. double length() {
  19. return sqrt(X*X + Y*Y + Z*Z);
  20. }
  21. inline void operator=(const vector a) {
  22. X = a.X;
  23. Y = a.Y;
  24. Z = a.Z;
  25. }
  26. inline void operator+=(const vector a) {
  27. X += a.X;
  28. Y += a.Y;
  29. Z += a.Z;
  30. }
  31. inline int operator==(const vector a) {
  32. return (X == a.X && Y == a.Y && Z == a.Z);
  33. }
  34. inline int operator!=(const vector a) {
  35. return (X != a.X || Y != a.Y || Z != a.Z);
  36. }
  37. inline vector operator-(const vector a) {
  38. return vector(X-a.X, Y-a.Y, Z-a.Z);
  39. }
  40. friend inline vector operator*(const double a, const vector b) {
  41. return vector(a*b.X, a*b.Y, a*b.Z);
  42. }
  43. friend inline vector operator/(const vector a, const double b) {
  44. return vector(a.X/b, a.Y/b, a.Z/b);
  45. }
  46. double X;
  47. double Y;
  48. double Z;
  49. };
  50. class Neighbor {
  51. public:
  52. u_int32_t index; // index into NodeList
  53. u_int32_t reachable; // != 0 --> reachable.
  54. double time_transition; // next change
  55. };
  56. struct setdest {
  57.   double time;
  58.   double X, Y, Z;
  59.   double speed;
  60.   LIST_ENTRY(setdest)   traj;
  61. };
  62. class Node {
  63.   friend void ReadInMovementPattern(void);
  64. public:
  65. Node(void);
  66. void Update(void);
  67. void UpdateNeighbors(void);
  68. void Dump(void);
  69. double time_arrival; // time of arrival at dest
  70. double time_transition; // min of all neighbor times
  71. // # of optimal route changes for this node
  72. int route_changes;
  73.         int             link_changes;
  74. private:
  75. void RandomPosition(void);
  76. void RandomDestination(void);
  77. void RandomSpeed(void);
  78. u_int32_t index;                  // unique node identifier
  79. u_int32_t  first_trip; // 1 if first trip, 0 otherwise. (by J. Yoon)
  80. vector position; // current position
  81. vector destination; // destination
  82. vector direction; // computed from pos and dest
  83. double speed;
  84. double time_update; // when pos last updated
  85. static u_int32_t NodeIndex;
  86. LIST_HEAD(traj, setdest) traj;
  87. public:
  88. // An array of NODES neighbors.
  89. Neighbor *neighbor;
  90. };
  91. #endif /* __setdest_h__ */