00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef WIFI_STATS_MODULE_HXX_
00023 # define WIFI_STATS_MODULE_HXX_
00024
00025 # include <wipal/wifi/stats/module.hh>
00026
00027 namespace wpl
00028 {
00029
00030 namespace wifi
00031 {
00032
00033 namespace stats
00034 {
00035
00036
00037
00038
00039
00040 inline
00041 void
00042 module::account_addr(unsigned i, const addr&)
00043 {
00044 }
00045
00046 template <class Frame>
00047 void
00048 module::account_beacon(const Frame& ,
00049 const addr* const& ,
00050 const addr* const& ,
00051 const optional_string& ,
00052 const bool& )
00053 {
00054 }
00055
00056 inline
00057 void
00058 module::account_duplicate()
00059 {
00060 }
00061
00062 inline
00063 void
00064 module::account_expired()
00065 {
00066 }
00067
00068 template <class Frame>
00069 void
00070 module::account_frame(const Frame& ,
00071 const size_t& ,
00072 const type::frame_type& ,
00073 const unsigned& ,
00074 const bool& ,
00075 const addr* const& ,
00076 const addr* const& ,
00077 const bool& )
00078 {
00079 }
00080
00081 inline
00082 void
00083 module::account_gap(const unsigned&)
00084 {
00085 }
00086
00087 inline
00088 void
00089 module::account_miss()
00090 {
00091 }
00092
00093 inline
00094 void
00095 module::account_out_of_order()
00096 {
00097 }
00098
00099 inline
00100 void
00101 module::account_seq_anomaly()
00102 {
00103 }
00104
00105 inline
00106 void
00107 module::restart()
00108 {
00109 }
00110
00111
00112
00113
00114
00115 template <class H, class T>
00116 module_list<H, T>::module_list(): H (this), T (this)
00117 {
00118 }
00119
00120 template <class H, class T>
00121 template <class ML>
00122 module_list<H, T>::module_list(const ML* other_modules):
00123 H (other_modules),
00124 T (other_modules)
00125 {
00126 }
00127
00128 # define WP_module_list_delegate(FunCall) \
00129 T::FunCall; \
00130 H::FunCall
00131
00132 template <class H, class T>
00133 void
00134 module_list<H, T>::account_addr(unsigned i, const addr& a)
00135 {
00136 WP_module_list_delegate(account_addr(i, a));
00137 }
00138
00139 template <class H, class T>
00140 template <class Frame>
00141 void
00142 module_list<H, T>::
00143 account_beacon(const Frame& frame,
00144 const addr* const& ap,
00145 const addr* const& bss,
00146 const optional_string& ssid,
00147 const bool& ibss)
00148 {
00149 WP_module_list_delegate(account_beacon(frame, ap, bss, ssid, ibss));
00150 }
00151
00152 template <class H, class T>
00153 void
00154 module_list<H, T>::account_duplicate()
00155 {
00156 WP_module_list_delegate(account_duplicate());
00157 }
00158
00159 template <class H, class T>
00160 void
00161 module_list<H, T>::account_expired()
00162 {
00163 WP_module_list_delegate(account_expired());
00164 }
00165
00166 template <class H, class T>
00167 template <class Frame>
00168 void
00169 module_list<H, T>::
00170 account_frame(const Frame& frame,
00171 const size_t& len80211,
00172 const type::frame_type& type,
00173 const unsigned& subtype,
00174 const bool& retx,
00175 const addr* const& receiver,
00176 const addr* const& transmitter,
00177 const bool& from_ap)
00178 {
00179 WP_module_list_delegate(account_frame(frame, len80211, type, subtype,
00180 retx, receiver, transmitter,
00181 from_ap));
00182 }
00183
00184 template <class H, class T>
00185 void
00186 module_list<H, T>::account_gap(const unsigned& gaplen)
00187 {
00188 WP_module_list_delegate(account_gap(gaplen));
00189 }
00190
00191 template <class H, class T>
00192 void
00193 module_list<H, T>::account_miss()
00194 {
00195 WP_module_list_delegate(account_miss());
00196 }
00197
00198 template <class H, class T>
00199 void
00200 module_list<H, T>::account_out_of_order()
00201 {
00202 WP_module_list_delegate(account_out_of_order());
00203 }
00204
00205 template <class H, class T>
00206 void
00207 module_list<H, T>::account_seq_anomaly()
00208 {
00209 WP_module_list_delegate(account_seq_anomaly());
00210 }
00211
00212 template <class H, class T>
00213 void
00214 module_list<H, T>::restart()
00215 {
00216 WP_module_list_delegate(restart());
00217 }
00218
00219 # undef WP_module_list_delegate
00220
00221 template <class H, class T>
00222 std::ostream&
00223 module_list<H, T>::print(std::ostream& os) const
00224 {
00225 return T::print(H::print(os) << '\n');
00226 }
00227
00228 template <class H, class Tail>
00229 template <class T>
00230 T&
00231 module_list<H, Tail>::get()
00232 {
00233 return *static_cast<T*> (this);
00234 }
00235
00236 template <class H, class Tail>
00237 template <class T>
00238 const T&
00239 module_list<H, Tail>::get() const
00240 {
00241 return *static_cast<const T*> (this);
00242 }
00243
00244 template <class H, class T>
00245 std::ostream&
00246 operator << (std::ostream& os, const module_list<H, T>& ml)
00247 {
00248 return ml.print(os);
00249 }
00250
00251 }
00252
00253 }
00254
00255 }
00256
00257 #endif // ! WIFI_STATS_MODULE_HXX_