neighbordb.cc
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:2k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #include "neighbordb.h"
  19. /** 
  20.  * Constructor
  21.  */
  22. NeighborDB::NeighborDB ()
  23. {
  24.   nbentry_ = 0;
  25.   nbs_ = (NeighborEntry **) malloc (DEFAULT_DB_SIZE*sizeof (NeighborEntry *));
  26. }
  27. /**
  28.  * Destructor
  29.  */
  30. NeighborDB::~NeighborDB ()
  31. {
  32.   for (int i=0 ; i < nbentry_ ; i++) {
  33.     delete (nbs_[i]);
  34.   }
  35. }
  36. /**
  37.  * Add an entry in the database
  38.  * @param nb The neighbor to add
  39.  */
  40. void NeighborDB::addNeighbor (NeighborEntry *nb)
  41. {
  42.   if (nbentry_ == DEFAULT_DB_SIZE) {
  43.     printf ("Default size for neighbor database is too small. Update DEFAULT_DB_SIZE attributen");
  44.     exit (0);
  45.   }
  46.   nbs_[nbentry_++] = nb;
  47. }
  48. /**
  49.  * Remove the entry associated with the given node
  50.  * @param nbid The neighbor id
  51.  */
  52. void NeighborDB::removeNeighbor (int nbid)
  53. {
  54.   assert (getNeighbor (nbid)==NULL);
  55.   for (int i = 0 ; i < nbentry_ ; i++) {
  56.     if (nbs_[i]->getID() == nbid) {
  57.       delete (nbs_[i]);
  58.       for (int j = i+1 ; j < nbentry_ ; j++, i++)
  59. nbs_[i]=nbs_[j];
  60.       nbentry_--;
  61.       break;
  62.     }
  63.   }
  64. }
  65. /**
  66.  * Return the number of neighbor in the list
  67.  * @return the number of neighbor in the list
  68.  */
  69. int NeighborDB::getNbNeighbor ()
  70. {
  71.   return nbentry_;
  72. }
  73. /**
  74.  * Return the entry associated with the given node
  75.  * @param nbid The neighbor id
  76.  * @return the entry for the given node or NULL
  77.  */
  78. NeighborEntry * NeighborDB::getNeighbor (int nbid)
  79. {
  80.   for (int i = 0 ; i < nbentry_ ; i++) {
  81.     if (nbs_[i]->getID() == nbid) {
  82.       return (nbs_[i]);
  83.     }
  84.   }
  85.   return NULL;
  86. }
  87. /**
  88.  * Return a pointer to the list of all neighbors
  89.  * @return a pointer to the list of all neighbors
  90.  */
  91. NeighborEntry ** NeighborDB::getNeighbors ()
  92. {
  93.   return nbs_;
  94. }