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

通讯编程

开发平台:

Visual C++

  1. /*
  2.  * nixvec.h
  3.  * Copyright (C) 2000 by the University of Southern California
  4.  * $Id: nixvec.h,v 1.3 2005/08/25 18:58:10 johnh Exp $
  5.  *
  6.  * This program is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU General Public License,
  8.  * version 2, as published by the Free Software Foundation.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License along
  16.  * with this program; if not, write to the Free Software Foundation, Inc.,
  17.  * 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
  18.  *
  19.  *
  20.  * The copyright of this module includes the following
  21.  * linking-with-specific-other-licenses addition:
  22.  *
  23.  * In addition, as a special exception, the copyright holders of
  24.  * this module give you permission to combine (via static or
  25.  * dynamic linking) this module with free software programs or
  26.  * libraries that are released under the GNU LGPL and with code
  27.  * included in the standard release of ns-2 under the Apache 2.0
  28.  * license or under otherwise-compatible licenses with advertising
  29.  * requirements (or modified versions of such code, with unchanged
  30.  * license).  You may copy and distribute such a system following the
  31.  * terms of the GNU GPL for this module and the licenses of the
  32.  * other code concerned, provided that you include the source code of
  33.  * that other code when and as the GNU GPL requires distribution of
  34.  * source code.
  35.  *
  36.  * Note that people who make modified versions of this module
  37.  * are not obligated to grant this special exception for their
  38.  * modified versions; it is their choice whether to do so.  The GNU
  39.  * General Public License gives permission to release a modified
  40.  * version without this exception; this exception also makes it
  41.  * possible to release a modified version which carries forward this
  42.  * exception.
  43.  *
  44.  */
  45. /*
  46.  * Support for NixVector routing
  47.  * contributed to ns from 
  48.  * George F. Riley, Georgia Tech, Spring 2000
  49.  */
  50. #ifndef __NIXVEC_H__
  51. #define __NIXVEC_H__
  52. #include <utility>  // for pair
  53. #ifdef WIN32
  54. #include <pair.h>   // for MSVC 6.0 that doens't have a proper <utility>
  55. #endif /* WIN32 */
  56. // Define a type for the neighbor index
  57. typedef unsigned long Nix_t;
  58. typedef unsigned long Nixl_t; // Length of a NV
  59. const   Nix_t NIX_NONE = 0xffffffff;    // If not a neighbor
  60. const   Nixl_t NIX_BPW = 32;            // Bits per long word
  61. typedef pair<Nix_t,  Nixl_t> NixPair_t; // Index, bits needed
  62. typedef pair<Nix_t*, Nixl_t> NixpPair_t;// NV Pointer, length
  63. // The variable length neighbor index routing vector
  64. class NixVec {
  65.   public :
  66.     NixVec () : m_pNV(0), m_used(0), m_alth(0) { };
  67.     NixVec(NixVec*);              // Construct from existing
  68.     ~NixVec();                    // Destructor
  69.     void   Add(NixPair_t);        // Add bits to the nix vector
  70.     Nix_t  Extract(Nixl_t);       // Extract the specified number of bits
  71.     Nix_t  Extract(Nixl_t, Nixl_t*); // Extract using external "used"
  72.     NixpPair_t Get(void);         // Get the entire nv
  73.     void   Reset();               // Reset used to 0
  74.     Nixl_t Lth();                 // Get length in bits of allocated
  75.     void   DBDump();              // Debug..print it out
  76.     Nixl_t ALth() { return m_alth;} // Debug...how many bits actually used
  77.     static Nixl_t GetBitl(Nix_t); // Find out how many bits needed
  78.   private :
  79.     Nix_t* m_pNV;  // Points to variable lth nixvector (or actual if l == 32)
  80.   //    Nixl_t m_lth;  // Length of this nixvector (computed from m_alth)
  81.     Nixl_t m_used; // Used portion of this nixvector
  82.     Nixl_t m_alth; // Actual length (largest used)
  83. };
  84. #endif