andres::graph
adjacency.hxx
1 #pragma once
2 #ifndef ANDRES_GRAPH_ADJACENCY_HXX
3 #define ANDRES_GRAPH_ADJACENCY_HXX
4 
5 namespace andres {
6 namespace graph {
7 
9 template<class T = std::size_t>
10 class Adjacency {
11 public:
12  typedef T Value;
13 
14  Adjacency(const Value = T(), const Value = T());
15  Value vertex() const;
16  Value& vertex();
17  Value edge() const;
18  Value& edge();
19  bool operator<(const Adjacency<Value>&) const;
20  bool operator<=(const Adjacency<Value>&) const;
21  bool operator>(const Adjacency<Value>&) const;
22  bool operator>=(const Adjacency<Value>&) const;
23  bool operator==(const Adjacency<Value>&) const;
24  bool operator!=(const Adjacency<Value>&) const;
25 
26 private:
27  Value vertex_;
28  Value edge_;
29 };
30 
36 template<class T>
37 inline
39  const Value vertex,
40  const Value edge
41 )
42 : vertex_(vertex),
43  edge_(edge)
44 {}
45 
48 template<class T>
49 inline typename Adjacency<T>::Value
51  return vertex_;
52 }
53 
56 template<class T>
57 inline typename Adjacency<T>::Value&
59  return vertex_;
60 }
61 
64 template<class T>
65 inline typename Adjacency<T>::Value
67  return edge_;
68 }
69 
72 template<class T>
73 inline typename Adjacency<T>::Value&
75  return edge_;
76 }
77 
80 template<class T>
81 inline bool
83  const Adjacency<T>& in
84 ) const {
85  if(vertex_ < in.vertex_) {
86  return true;
87  }
88  else if(vertex_ == in.vertex_) {
89  return edge_ < in.edge_;
90  }
91  else {
92  return false;
93  }
94 }
95 
98 template<class T>
99 inline bool
101  const Adjacency<T>& in
102 ) const {
103  if(vertex_ < in.vertex_) {
104  return true;
105  }
106  else if(vertex_ == in.vertex_) {
107  return edge_ <= in.edge_;
108  }
109  else {
110  return false;
111  }
112 }
113 
116 template<class T>
117 inline bool
119  const Adjacency<T>& in
120 ) const {
121  if(vertex_ > in.vertex_) {
122  return true;
123  }
124  else if(vertex_ == in.vertex_) {
125  return edge_ > in.edge_;
126  }
127  else {
128  return false;
129  }
130 }
131 
134 template<class T>
135 inline bool
137  const Adjacency<T>& in
138 ) const {
139  if(vertex_ > in.vertex_) {
140  return true;
141  }
142  else if(vertex_ == in.vertex_) {
143  return edge_ >= in.edge_;
144  }
145  else {
146  return false;
147  }
148 }
149 
152 template<class T>
153 inline bool
155  const Adjacency<T>& in
156 ) const {
157  return vertex_ == in.vertex_ && edge_ == in.edge_;
158 }
159 
162 template<class T>
163 inline bool
165  const Adjacency<T>& in
166 ) const {
167  return !(*this == in);
168 }
169 
170 } // namespace graph
171 } // namespace andres
172 
173 #endif // #ifndef ANDRES_GRAPH_ADJACENCY_HXX