00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef PCAP_FILE_ITERATOR_HH_
00023 # define PCAP_FILE_ITERATOR_HH_
00024
00025 # include <istream>
00026
00027 # include <boost/scoped_ptr.hpp>
00028
00029 # include <wipal/pcap/pkt.hh>
00030 # include <wipal/tool/valued_iterator.hh>
00031
00032 namespace wpl
00033 {
00034
00035
00036
00037
00038
00039 namespace pcap
00040 {
00042 namespace internals
00043 {
00044
00045 template <class, class>
00046 struct file_iterator;
00047
00048 }
00049 }
00050
00051
00052
00053
00054
00055
00056 namespace tool
00057 {
00058
00059 template <class S, class B>
00060 struct types< pcap::internals::file_iterator<S, B> >
00061 {
00062 typedef pkt::packet<S> value_type;
00063 typedef S iterable_type;
00064 };
00065
00066 }
00067
00068
00069
00070
00071
00072
00073 namespace pcap
00074 {
00075
00076 namespace internals
00077 {
00078
00080 template <class Stream, class Bottom = tool::bottom>
00081 struct file_iterator:
00082 public tool::valued_iterator<WP_GET_EXACT(Bottom,
00083 file_iterator<Stream,
00084 Bottom>)>
00085 {
00087
00088 typedef WP_GET_EXACT(Bottom, file_iterator<Stream,
00089 Bottom>) exact_type;
00090 typedef WP_TYPE(iterable_type, exact_type) iterable_type;
00091 typedef WP_TYPE(value_type, exact_type) value_type;
00093
00095 file_iterator(const iterable_type& stream, bool end);
00096
00098 file_iterator(const iterable_type& stream,
00099 const std::streampos& pos,
00100 unsigned count,
00101 std::istream* const istream = 0);
00102
00104 file_iterator(const file_iterator&);
00105
00107 file_iterator& operator = (const file_iterator&);
00108
00110
00111 bool equal(const file_iterator& rhs) const;
00112 void increment();
00114
00115 protected:
00117 std::istream& stream();
00118
00120 void increment_pcap();
00121
00122 private:
00124 const iterable_type* stream_;
00125
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143 boost::scoped_ptr<std::istream> input_;
00144 std::streampos pos_;
00145 unsigned count_;
00146
00148 };
00149
00150 }
00151
00152 }
00153
00154 }
00155
00156 # include "file_iterator.hxx"
00157
00158 #endif // ! PCAP_FILE_ITERATOR_HH_