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

通讯编程

开发平台:

Visual C++

  1. // Author: Satish Kumar, kkumar@isi.edu
  2. #ifndef tag_h_
  3. #define tag_h_
  4. #include <cstdlib>
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <iostream>
  8. #include <iomanip.h>
  9. #include <assert.h>
  10. #include <tclcl.h>
  11. #include <trace.h>
  12. #include <rng.h>
  13. #define NUM_RECTANGLES 10 // Divide into 10 rectangles at each level
  14. #define TRUE 1
  15. #define FALSE 0
  16. // Structure used for caching at agents
  17. class TagCache {
  18. public:
  19.   int obj_name_;
  20.   int origin_time_;
  21.   double X_;
  22.   double Y_;
  23. };
  24. // Object to hold attribute value pairs
  25. class attribs {
  26.   char *name;
  27.   char *value;
  28.   attribs *next_;
  29. };
  30. // Tag object definition
  31. class tag {
  32. public:
  33.   tag() { next_ = NULL;}
  34.   double x_;           // x-coordinate
  35.   double y_;           // y-coordinate
  36.   int obj_name_;  // Hierarchical object name
  37.   attribs *attributes_; // <attribute, value> pairs
  38.   tag *next_; // Used to attach tags to a list
  39. };
  40.   
  41. // List of tags in 2-dimensional space (for now)
  42. class dbase_node {
  43. public:
  44.   dbase_node (double x_min, double x_max, double y_min, double y_max) {
  45.     assert ((x_min <= x_max) && (y_min <= y_max));
  46.     x_min_ = x_min;
  47.     x_max_ = x_max;
  48.     y_min_ = y_min;
  49.     y_max_ = y_max;
  50.     tags_list_ = NULL;
  51.     for(int i = 0; i < NUM_RECTANGLES; ++i) {
  52.       list_node_[i] = NULL;
  53.     }
  54.     
  55.   };
  56.   
  57.   double x_min_;
  58.   double x_max_;
  59.   double y_min_;
  60.   double y_max_;
  61.   // Divide into NUM_RECTANGLES rectangles at each level
  62.   dbase_node *list_node_[NUM_RECTANGLES]; 
  63.   tag *tags_list_;
  64. };
  65. // A compressed list returned to the node. Excluded attributes for now.
  66. class compr_taglist {
  67. public:
  68.   compr_taglist() { next_ = NULL;}
  69.   int obj_name_;
  70.   compr_taglist *next_;
  71. };
  72. class tags_database : public TclObject {
  73. public:
  74.   tags_database() : tags_db_(NULL) { 
  75.      num_tags_ = 0;
  76.      num_sensed_tags_ = 0;
  77.      sensed_tag_list_ = NULL;
  78.      num_freq_qry_tags_= 0;   
  79.      freq_qry_tag_list_ = NULL;
  80.      rn_ = new RNG;
  81.   }
  82.   ~tags_database() {
  83.     // Need to add deletion of tree as well
  84.     delete[] sensed_tag_list_;
  85.   }
  86.   virtual int command(int argc, const char * const * argv);
  87.   void create_tags_database(double x_min, double x_max, double y_min, double y_max, int num_tags);
  88.   void Addtag(const tag *tag_);
  89.   void Deletetag(const tag *tag_);
  90.   compr_taglist *Gettags(double x, double y, double r); // Returns all tags 
  91.                              // within a circle centered at (x,y) and radius r
  92.   Trace *tracetarget_;       // Trace target
  93.   void trace(char *fmt,...);   
  94.   int get_random_tag();
  95. protected:
  96.   dbase_node *tags_db_;  // interior node
  97.   int num_tags_;         // total number of tags in database
  98.   int num_sensed_tags_;  // number of tags sensed by nodes
  99.   int *sensed_tag_list_; // list of all tags sensed by nodes
  100.   int num_freq_qry_tags_;   // number of frequently queried tags       
  101.   int *freq_qry_tag_list_;  // tags that will be frequently queried
  102.   RNG *rn_;
  103.   compr_taglist *vtags_; //used to store returned tag list after search    
  104.   void add_level(double x_min, double x_max, double y_min, double y_max, dbase_node *dbnode);        
  105.   void search_tags_dbase(double x, double y, double r, dbase_node *dbnode);
  106. };
  107. #endif