00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FILTER_TIMETRACKER_HXX_
00023 # define FILTER_TIMETRACKER_HXX_
00024
00025 # include "timetracker.hh"
00026
00027 namespace wpl
00028 {
00029
00030 namespace filter
00031 {
00032
00033 namespace internals
00034 {
00035
00036 template <class I, class HT, class B1, class B2>
00037 timetracker_iterator<I, HT, B1, B2>::
00038 timetracker_iterator(const iterable_type& i, bool end):
00039 iterable_ (&i),
00040 next_ (end ? i.last_ : i.first_),
00041 tracker_ (i.pcap_tstamps_)
00042 {
00043 if (not end)
00044 increment();
00045 }
00046
00047 template <class I, class HT, class B1, class B2>
00048 bool
00049 timetracker_iterator<I, HT, B1, B2>::
00050 equal(const timetracker_iterator& rhs) const
00051 {
00052 if (not rhs.value())
00053 return not this->value();
00054
00055 const bool r (next_ == rhs.next_);
00056
00057 assert(not r or
00058 tracker_.microseconds() == rhs.tracker_.microseconds());
00059
00060 return r;
00061 }
00062
00063 template <class I, class HT, class B1, class B2>
00064 void
00065 timetracker_iterator<I, HT, B1, B2>::increment()
00066 {
00067 if (next_ == iterable_->last_)
00068 {
00069 this->value() = boost::none_t ();
00070 return;
00071 }
00072
00073 tracker_.tick<HT>(*next_, iterable_->phy_end_);
00074 this->value() = value_type (tracker_.microseconds(), *next_);
00075 ++next_;
00076 }
00077
00078 }
00079
00080 template <class I, class HT, class B>
00081 timetracker<I, HT, B>::
00082 timetracker(const I& first,
00083 const I& last,
00084 tool::end::endianness phy_end,
00085 bool pcap_tstamps):
00086 first_ (first),
00087 last_ (last),
00088 phy_end_ (phy_end),
00089 pcap_tstamps_ (pcap_tstamps)
00090 {
00091 }
00092
00093 }
00094
00095 }
00096
00097 #endif // ! FILTER_TIMETRACKER_HXX_