forest-net
an overlay networks for large-scale virtual worlds
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
IfaceTable.h
Go to the documentation of this file.
1 
9 #ifndef IFACETABLE_H
10 #define IFACETABLE_H
11 
12 #include "Forest.h"
13 #include "RateSpec.h"
14 #include "ListPair.h"
15 
16 using namespace grafalgo;
17 
18 namespace forest {
19 
20 class IfaceTable {
21 public:
23  class Entry {
24  public:
25  ipa_t ipa;
26  ipp_t port;
27  int sock;
30 
31  string toString() const;
32  friend ostream& operator<<(ostream& out, const Entry& a) {
33  return out << a.toString();
34  }
35  };
36 
37  IfaceTable(int);
38  ~IfaceTable();
39 
40  // predicates
41  bool valid(int) const;
42 
43  // iteration methods
44  int firstIface() const;
45  int nextIface(int) const;
46 
47  // access methods
48  Entry& getEntry(int);
49  int getDefaultIface() const;
50  int getFreeIface() const;
51 
52  // modifiers
53  bool addEntry(int,ipa_t,ipp_t,RateSpec&);
54  void removeEntry(int);
55  void setDefaultIface(int);
56 
57  // io routines
58  bool read(istream&);
59  string toString() const;
60 
61  string entry2string(int) const;
62 private:
63  int maxIf;
64  int defaultIf;
66  ListPair *ifaces;
67 
68  // helper methods
69  int readEntry(istream&);
70 
71 };
72 
77 inline bool IfaceTable::valid(int iface) const {
78  return ifaces->isIn(iface);
79 }
80 
88 inline int IfaceTable::firstIface() const {
89  return ifaces->firstIn();
90 }
91 
100 inline int IfaceTable::nextIface(int iface) const {
101  return ifaces->nextIn(iface);
102 }
103 
111 inline int IfaceTable::getDefaultIface() const {
112  return defaultIf;
113 }
114 
119 inline int IfaceTable::getFreeIface() const {
120  return ifaces->firstOut();
121 }
122 
127 inline IfaceTable::Entry& IfaceTable::getEntry(int iface) {
128  if (!valid(iface)) {
129  string s = "IfaceTable::Entry::getEntry:: invalid interface "
130  + to_string(iface) + "\n";
131  throw IllegalArgumentException(s);
132  }
133  return ift[iface];
134 }
135 
139 inline void IfaceTable::setDefaultIface(int iface) {
140  if (valid(iface)) defaultIf = iface;
141 }
142 
143 } // ends namespace
144 
145 
146 #endif