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

通讯编程

开发平台:

Visual C++

  1. /* -*- Mode:C++; c-basic-offset:2; tab-width:2; indent-tabs-mode:f -*- */
  2. /* Nix-Vector routing capable node. */
  3. /* George F. Riley, Georgia Tech, Spring 2000 */
  4. /* Changed to NOT subclass the Node class, suggestion from ns developers */
  5. #ifndef __NIXNODE_H__
  6. #define __NIXNODE_H__
  7. #include "routealgo/rnode.h"
  8. #include "object.h"
  9. #include <map>
  10. // Define the edge class
  11. class Edge {
  12. public :
  13.   Edge( nodeid_t n) : m_n(n) { };
  14. public :
  15.   nodeid_t m_n; // Other end of edge neighbor
  16. };
  17. typedef vector<Edge*>         EdgeVec_t;
  18. typedef EdgeVec_t::iterator   EdgeVec_it;
  19. typedef vector<NsObject*>     ObjVec_t;
  20. typedef ObjVec_t::iterator    ObjVec_it;
  21. // Use a map to keep a table of known NixVectors
  22. typedef map<nodeid_t, NixVec*, less<nodeid_t> > NVMap_t;
  23. typedef NVMap_t::iterator                       NVMap_it;
  24. typedef NVMap_t::value_type                     NVPair_t;
  25. class NixNode : public RNode {
  26. public :
  27. NixNode();
  28. void     Id(nodeid_t id) { m_id = id;}
  29.   nodeid_t Id()     const { return m_id;}
  30.   int      Map()    const { return m_Map;}
  31.   void AddAdj(nodeid_t);     // Add a simplex link from this to neighbor
  32.   int  IsNeighbor(nodeid_t); // True if specified node is neighbor
  33.   virtual const NodeWeight_t NextAdj( const NodeWeight_t&); // Return next adjacent
  34.   NixVec* ComputeNixVector(nodeid_t);       // Compute the NixVector to target
  35.   virtual NixPair_t GetNix(nodeid_t);       // Get neighbor index/length
  36.   virtual Nixl_t    GetNixl();              // Get bits needed for nix entry
  37.   virtual nodeid_t  GetNeighbor(Nix_t, NixVec*);     // Get neighbor from nix
  38. NixVec*           GetNixVector(nodeid_t); // Get a nix vector for a target
  39.   NsObject*         GetNsNeighbor(Nix_t);   // Get the ns nexthop neighbor
  40. void    PopulateObjects(void);       // Populate NS NextHop objects
  41.   static NixNode*   GetNodeObject(nodeid_t); // Get a node obj. based on id
  42.   static void       PopulateAllObjects(void);// Populate the next hop objects
  43. private :
  44.   EdgeVec_t    m_Adj;             // Adjacent edges
  45. ObjVec_t     m_AdjObj;          // NS Objects for adjacencies
  46.   int          m_Map;             // Which system this node is mapped to
  47.   NVMap_t*     m_pNixVecs;        // Hash-map list of known NixVectors
  48. };
  49. #endif