00001
00002 #ifndef MIX_FUNCTIONS_H_
00003 #define MIX_FUNCTIONS_H_
00004
00005 #include "misc.h"
00006 #include "extern.h"
00007
00008 #include <functional>
00009
00014 namespace MiX{
00021 template <class Char,class Traits,class XMLTraits>
00022 class NodeTypeChecker
00023 : public MiX_STD::unary_function<const Node<Char,Traits,XMLTraits>*,bool>{
00024 public:
00025 MiX_Template_Typedef(Char,Traits,XMLTraits);
00026 private:
00027 NodeType type_;
00028 public:
00030 NodeTypeChecker(NodeType t) : type_(t){ };
00032 result_type operator()(argument_type node)const{
00033 return (node->getType()==type_);
00034 };
00035 };
00036
00044 template <class Char,class Traits,class XMLTraits>
00045 class NodeNameChecker : public MiX_STD::unary_function<const Node<Char,Traits,XMLTraits>*,bool>{
00046 public:
00047 MiX_Template_Typedef(Char,Traits,XMLTraits);
00048 private:
00049 string_type name_;
00050 public:
00052 NodeNameChecker(const string_type& name) : name_(name){ };
00054 result_type operator()(argument_type node)const;
00055 };
00056
00063 template <class Char,class Traits,class XMLTraits>
00064 class NamedNodeFinder
00065 : public boost::compose_f_gx_hx_t<MiX_STD::logical_and<bool>,NodeTypeChecker<Char,Traits,XMLTraits>,NodeNameChecker<Char,Traits,XMLTraits> >{
00066 public:
00067 MiX_Template_Typedef(Char,Traits,XMLTraits);
00068 public:
00075 NamedNodeFinder(NodeType type,const string_type& name)
00076 : boost::compose_f_gx_hx_t<MiX_STD::logical_and<bool>,NodeTypeChecker<Char,Traits,XMLTraits>,NodeNameChecker<Char,Traits,XMLTraits> >(MiX_STD::logical_and<bool>(),NodeTypeChecker<Char,Traits,XMLTraits>(type),NodeNameChecker<Char,Traits,XMLTraits>(name)){
00077 }
00078 };
00079
00080 }
00081
00082 #ifndef MIX_FUNCTIONS_CPP_
00083 #include "Functions.cpp"
00084 #endif
00085
00086 #endif