Hex Artifact Content
Not logged in

Artifact 9c037e37b75d062298302021d57021acd127bd61:


0000: 2f 2a 0a 20 2a 20 43 6f 70 79 72 69 67 68 74 20  /*. * Copyright 
0010: 28 63 29 20 32 30 30 33 2d 32 30 30 35 20 4a 69  (c) 2003-2005 Ji
0020: 6e 79 61 6e 67 20 4c 69 0a 20 2a 20 20 20 20 20  nyang Li. *     
0030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
0040: 61 73 73 61 63 68 75 73 65 74 74 73 20 49 6e 73  assachusetts Ins
0050: 74 69 74 75 74 65 20 6f 66 20 54 65 63 68 6e 6f  titute of Techno
0060: 6c 6f 67 79 0a 20 2a 20 0a 20 2a 20 50 65 72 6d  logy. * . * Perm
0070: 69 73 73 69 6f 6e 20 69 73 20 68 65 72 65 62 79  ission is hereby
0080: 20 67 72 61 6e 74 65 64 2c 20 66 72 65 65 20 6f   granted, free o
0090: 66 20 63 68 61 72 67 65 2c 20 74 6f 20 61 6e 79  f charge, to any
00a0: 20 70 65 72 73 6f 6e 20 6f 62 74 61 69 6e 69 6e   person obtainin
00b0: 67 0a 20 2a 20 61 20 63 6f 70 79 20 6f 66 20 74  g. * a copy of t
00c0: 68 69 73 20 73 6f 66 74 77 61 72 65 20 61 6e 64  his software and
00d0: 20 61 73 73 6f 63 69 61 74 65 64 20 64 6f 63 75   associated docu
00e0: 6d 65 6e 74 61 74 69 6f 6e 20 66 69 6c 65 73 20  mentation files 
00f0: 28 74 68 65 0a 20 2a 20 22 53 6f 66 74 77 61 72  (the. * "Softwar
0100: 65 22 29 2c 20 74 6f 20 64 65 61 6c 20 69 6e 20  e"), to deal in 
0110: 74 68 65 20 53 6f 66 74 77 61 72 65 20 77 69 74  the Software wit
0120: 68 6f 75 74 20 72 65 73 74 72 69 63 74 69 6f 6e  hout restriction
0130: 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 20 2a 20 77  , including. * w
0140: 69 74 68 6f 75 74 20 6c 69 6d 69 74 61 74 69 6f  ithout limitatio
0150: 6e 20 74 68 65 20 72 69 67 68 74 73 20 74 6f 20  n the rights to 
0160: 75 73 65 2c 20 63 6f 70 79 2c 20 6d 6f 64 69 66  use, copy, modif
0170: 79 2c 20 6d 65 72 67 65 2c 20 70 75 62 6c 69 73  y, merge, publis
0180: 68 2c 0a 20 2a 20 64 69 73 74 72 69 62 75 74 65  h,. * distribute
0190: 2c 20 73 75 62 6c 69 63 65 6e 73 65 2c 20 61 6e  , sublicense, an
01a0: 64 2f 6f 72 20 73 65 6c 6c 20 63 6f 70 69 65 73  d/or sell copies
01b0: 20 6f 66 20 74 68 65 20 53 6f 66 74 77 61 72 65   of the Software
01c0: 2c 20 61 6e 64 20 74 6f 0a 20 2a 20 70 65 72 6d  , and to. * perm
01d0: 69 74 20 70 65 72 73 6f 6e 73 20 74 6f 20 77 68  it persons to wh
01e0: 6f 6d 20 74 68 65 20 53 6f 66 74 77 61 72 65 20  om the Software 
01f0: 69 73 20 66 75 72 6e 69 73 68 65 64 20 74 6f 20  is furnished to 
0200: 64 6f 20 73 6f 2c 20 73 75 62 6a 65 63 74 20 74  do so, subject t
0210: 6f 0a 20 2a 20 74 68 65 20 66 6f 6c 6c 6f 77 69  o. * the followi
0220: 6e 67 20 63 6f 6e 64 69 74 69 6f 6e 73 3a 0a 20  ng conditions:. 
0230: 2a 20 0a 20 2a 20 54 68 65 20 61 62 6f 76 65 20  * . * The above 
0240: 63 6f 70 79 72 69 67 68 74 20 6e 6f 74 69 63 65  copyright notice
0250: 20 61 6e 64 20 74 68 69 73 20 70 65 72 6d 69 73   and this permis
0260: 73 69 6f 6e 20 6e 6f 74 69 63 65 20 73 68 61 6c  sion notice shal
0270: 6c 20 62 65 0a 20 2a 20 69 6e 63 6c 75 64 65 64  l be. * included
0280: 20 69 6e 20 61 6c 6c 20 63 6f 70 69 65 73 20 6f   in all copies o
0290: 72 20 73 75 62 73 74 61 6e 74 69 61 6c 20 70 6f  r substantial po
02a0: 72 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 53 6f  rtions of the So
02b0: 66 74 77 61 72 65 2e 0a 20 2a 20 0a 20 2a 20 54  ftware.. * . * T
02c0: 48 45 20 53 4f 46 54 57 41 52 45 20 49 53 20 50  HE SOFTWARE IS P
02d0: 52 4f 56 49 44 45 44 20 22 41 53 20 49 53 22 2c  ROVIDED "AS IS",
02e0: 20 57 49 54 48 4f 55 54 20 57 41 52 52 41 4e 54   WITHOUT WARRANT
02f0: 59 20 4f 46 20 41 4e 59 20 4b 49 4e 44 2c 0a 20  Y OF ANY KIND,. 
0300: 2a 20 45 58 50 52 45 53 53 20 4f 52 20 49 4d 50  * EXPRESS OR IMP
0310: 4c 49 45 44 2c 20 49 4e 43 4c 55 44 49 4e 47 20  LIED, INCLUDING 
0320: 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 20  BUT NOT LIMITED 
0330: 54 4f 20 54 48 45 20 57 41 52 52 41 4e 54 49 45  TO THE WARRANTIE
0340: 53 20 4f 46 0a 20 2a 20 4d 45 52 43 48 41 4e 54  S OF. * MERCHANT
0350: 41 42 49 4c 49 54 59 2c 20 46 49 54 4e 45 53 53  ABILITY, FITNESS
0360: 20 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41   FOR A PARTICULA
0370: 52 20 50 55 52 50 4f 53 45 20 41 4e 44 0a 20 2a  R PURPOSE AND. *
0380: 20 4e 4f 4e 49 4e 46 52 49 4e 47 45 4d 45 4e 54   NONINFRINGEMENT
0390: 2e 20 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48  . IN NO EVENT SH
03a0: 41 4c 4c 20 54 48 45 20 41 55 54 48 4f 52 53 20  ALL THE AUTHORS 
03b0: 4f 52 20 43 4f 50 59 52 49 47 48 54 20 48 4f 4c  OR COPYRIGHT HOL
03c0: 44 45 52 53 20 42 45 0a 20 2a 20 4c 49 41 42 4c  DERS BE. * LIABL
03d0: 45 20 46 4f 52 20 41 4e 59 20 43 4c 41 49 4d 2c  E FOR ANY CLAIM,
03e0: 20 44 41 4d 41 47 45 53 20 4f 52 20 4f 54 48 45   DAMAGES OR OTHE
03f0: 52 20 4c 49 41 42 49 4c 49 54 59 2c 20 57 48 45  R LIABILITY, WHE
0400: 54 48 45 52 20 49 4e 20 41 4e 20 41 43 54 49 4f  THER IN AN ACTIO
0410: 4e 0a 20 2a 20 4f 46 20 43 4f 4e 54 52 41 43 54  N. * OF CONTRACT
0420: 2c 20 54 4f 52 54 20 4f 52 20 4f 54 48 45 52 57  , TORT OR OTHERW
0430: 49 53 45 2c 20 41 52 49 53 49 4e 47 20 46 52 4f  ISE, ARISING FRO
0440: 4d 2c 20 4f 55 54 20 4f 46 20 4f 52 20 49 4e 20  M, OUT OF OR IN 
0450: 43 4f 4e 4e 45 43 54 49 4f 4e 0a 20 2a 20 57 49  CONNECTION. * WI
0460: 54 48 20 54 48 45 20 53 4f 46 54 57 41 52 45 20  TH THE SOFTWARE 
0470: 4f 52 20 54 48 45 20 55 53 45 20 4f 52 20 4f 54  OR THE USE OR OT
0480: 48 45 52 20 44 45 41 4c 49 4e 47 53 20 49 4e 20  HER DEALINGS IN 
0490: 54 48 45 20 53 4f 46 54 57 41 52 45 2e 0a 20 2a  THE SOFTWARE.. *
04a0: 2f 0a 0a 23 69 66 6e 64 65 66 20 5f 5f 43 48 4f  /..#ifndef __CHO
04b0: 52 44 54 4f 45 5f 48 0a 23 64 65 66 69 6e 65 20  RDTOE_H.#define 
04c0: 5f 5f 43 48 4f 52 44 54 4f 45 5f 48 0a 0a 23 69  __CHORDTOE_H..#i
04d0: 6e 63 6c 75 64 65 20 22 63 68 6f 72 64 66 69 6e  nclude "chordfin
04e0: 67 65 72 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  ger.h".#include 
04f0: 22 63 68 6f 72 64 66 69 6e 67 65 72 70 6e 73 2e  "chordfingerpns.
0500: 68 22 0a 0a 2f 2a 20 43 68 6f 72 64 46 69 6e 67  h"../* ChordFing
0510: 65 72 20 69 6d 70 6c 65 6d 65 6e 74 73 20 66 69  er implements fi
0520: 6e 67 65 72 20 74 61 62 6c 65 20 69 6e 20 61 64  nger table in ad
0530: 64 69 74 69 6f 6e 20 74 6f 20 43 68 6f 72 64 20  dition to Chord 
0540: 77 69 74 68 20 73 75 63 63 20 6c 69 73 74 2a 2f  with succ list*/
0550: 0a 0a 63 6c 61 73 73 20 4c 6f 63 54 61 62 6c 65  ..class LocTable
0560: 54 6f 65 20 3a 20 70 75 62 6c 69 63 20 4c 6f 63  Toe : public Loc
0570: 54 61 62 6c 65 20 7b 0a 70 75 62 6c 69 63 3a 0a  Table {.public:.
0580: 20 20 69 6e 74 20 5f 73 74 79 6c 65 3b 0a 20 20    int _style;.  
0590: 76 65 63 74 6f 72 3c 43 68 6f 72 64 3a 3a 49 44  vector<Chord::ID
05a0: 4d 61 70 3e 20 5f 74 6f 65 73 3b 0a 0a 20 20 4c  Map> _toes;..  L
05b0: 6f 63 54 61 62 6c 65 54 6f 65 20 28 29 20 3a 20  ocTableToe () : 
05c0: 4c 6f 63 54 61 62 6c 65 20 28 29 20 7b 7d 3b 0a  LocTable () {};.
05d0: 20 20 76 69 72 74 75 61 6c 20 7e 4c 6f 63 54 61    virtual ~LocTa
05e0: 62 6c 65 54 6f 65 20 28 29 20 7b 7d 3b 0a 0a 20  bleToe () {};.. 
05f0: 20 43 68 6f 72 64 3a 3a 49 44 4d 61 70 20 6e 65   Chord::IDMap ne
0600: 78 74 5f 68 6f 70 28 43 68 6f 72 64 3a 3a 43 48  xt_hop(Chord::CH
0610: 49 44 20 6b 65 79 29 3b 0a 0a 20 20 76 6f 69 64  ID key);..  void
0620: 20 73 65 74 5f 73 74 79 6c 65 20 28 69 6e 74 20   set_style (int 
0630: 69 29 20 7b 5f 73 74 79 6c 65 20 3d 20 69 3b 7d  i) {_style = i;}
0640: 3b 0a 20 20 76 6f 69 64 20 73 65 74 5f 74 6f 65  ;.  void set_toe
0650: 73 20 28 76 65 63 74 6f 72 3c 43 68 6f 72 64 3a  s (vector<Chord:
0660: 3a 49 44 4d 61 70 3e 20 74 29 20 7b 20 5f 74 6f  :IDMap> t) { _to
0670: 65 73 20 3d 20 74 3b 20 7d 3b 0a 7d 3b 0a 0a 63  es = t; };.};..c
0680: 6c 61 73 73 20 43 68 6f 72 64 54 6f 65 20 3a 20  lass ChordToe : 
0690: 70 75 62 6c 69 63 20 43 68 6f 72 64 46 69 6e 67  public ChordFing
06a0: 65 72 50 4e 53 20 7b 0a 70 75 62 6c 69 63 3a 0a  erPNS {.public:.
06b0: 20 20 43 68 6f 72 64 54 6f 65 28 49 50 41 64 64    ChordToe(IPAdd
06c0: 72 65 73 73 20 69 2c 20 41 72 67 73 26 20 61 29  ress i, Args& a)
06d0: 3b 0a 20 20 43 68 6f 72 64 54 6f 65 20 28 29 3b  ;.  ChordToe ();
06e0: 0a 20 20 7e 43 68 6f 72 64 54 6f 65 28 29 20 7b  .  ~ChordToe() {
06f0: 7d 3b 0a 20 20 73 74 72 69 6e 67 20 70 72 6f 74  };.  string prot
0700: 6f 5f 6e 61 6d 65 28 29 20 7b 20 72 65 74 75 72  o_name() { retur
0710: 6e 20 22 43 68 6f 72 64 54 6f 65 22 3b 20 7d 0a  n "ChordToe"; }.
0720: 20 20 0a 20 20 76 6f 69 64 20 64 75 6d 70 28 29    .  void dump()
0730: 20 7b 7d 3b 0a 20 20 62 6f 6f 6c 20 73 74 61 62   {};.  bool stab
0740: 69 6c 69 7a 65 64 20 28 76 65 63 74 6f 72 3c 43  ilized (vector<C
0750: 48 49 44 3e 20 6c 69 64 29 20 7b 20 72 65 74 75  HID> lid) { retu
0760: 72 6e 20 74 72 75 65 3b 7d 0a 20 20 76 6f 69 64  rn true;}.  void
0770: 20 69 6e 69 74 73 74 61 74 65 28 29 3b 0a 20 20   initstate();.  
0780: 0a 70 72 6f 74 65 63 74 65 64 3a 0a 0a 20 20 69  .protected:..  i
0790: 6e 74 20 5f 6c 6f 6f 6b 75 70 5f 73 74 79 6c 65  nt _lookup_style
07a0: 3b 0a 20 20 0a 20 20 69 6e 74 20 61 64 64 5f 74  ;.  .  int add_t
07b0: 6f 65 20 28 49 44 4d 61 70 20 69 29 3b 0a 0a 20  oe (IDMap i);.. 
07c0: 20 76 65 63 74 6f 72 3c 49 44 4d 61 70 3e 20 5f   vector<IDMap> _
07d0: 74 6f 65 73 3b 0a 20 20 75 69 6e 74 20 5f 6e 75  toes;.  uint _nu
07e0: 6d 74 6f 65 73 3b 0a 20 20 0a 7d 3b 0a 0a 23 65  mtoes;.  .};..#e
07f0: 6e 64 69 66 0a                                   ndif.