00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef FILTER_MERGE_HH_
00023 # define FILTER_MERGE_HH_
00024
00025 # include <wipal/pcap/pkt.hh>
00026 # include <wipal/tool/endianness.hh>
00027
00028 namespace wpl
00029 {
00030
00031 namespace filter
00032 {
00033
00034 namespace internals
00035 {
00036
00037 template <class HT, class S1>
00038 struct equal
00039 {
00040 equal(const pkt::packet<S1>& lhs,
00041 const unsigned& precision,
00042 const tool::end::endianness& phy_end,
00043 const bool& force_pcap);
00044
00045 template <class S2>
00046 bool
00047 operator == (const pkt::packet<S2>& rhs) const;
00048
00049 private:
00050 const pkt::packet<S1>& lhs_;
00051 const unsigned& precision_;
00052 const tool::end::endianness& phy_end_;
00053 const bool& force_pcap_;
00054 };
00055
00056 template <class HT, class S1>
00057 equal<HT, S1>
00058 make_equal(const pkt::packet<S1>& lhs,
00059 const unsigned& precision,
00060 const tool::end::endianness& phy_end,
00061 const bool& force_pcap);
00062
00063 template <class HT, class S1, class S2>
00064 bool
00065 operator == (const pkt::packet<S2>& lhs,
00066 const equal<HT, S1>& rhs);
00067
00068 }
00069
00079 template <class UniqueId,
00080 class HeaderType,
00081 template <class, class, class> class Intersector,
00082 template <class, class, class, class> class Merger,
00083 class I1, class I2, class F>
00084 void
00085 provide_merge(const I1& first1, const I1& last1,
00086 const I2& first2, const I2& last2,
00087 opt::list& options,
00088 F& func);
00089
00090 }
00091
00092 }
00093
00094 # include "merge.hxx"
00095
00096 #endif // ! FILTER_MERGE_HH_