Functions.h Source File

メインページ 名前空間一覧 クラス階層 構成 ファイル一覧 名前空間メンバ 構成メンバ ファイルメンバ

# Functions.h

解説を見る。

    00001 // -*- mode: C++ -*-
    00002 #ifndef MIX_FUNCTIONS_H_
    00003 #define MIX_FUNCTIONS_H_
    00004
    00005 #include "misc.h"
    00006 #include "extern/compose.hpp"
    00007
    00008 #include <functional>
    00009
    00014 namespace MiX{
    00015   template <class charT,class char_traits,class xml_traits>
    00016   class NodeTypeChecker
    00017     : public std::unary_function<const Node<charT,char_traits,xml_traits>*,bool>{
    00018   public:
    00019     MiX_Template_Typedef(charT,char_traits,xml_traits);
    00020     typedef const Node<charT,char_traits,xml_traits>* argument_type;
    00021     typedef bool result_type;
    00022   private:
    00023     NodeType type_;
    00024   public:
    00026     NodeTypeChecker(NodeType t) : type_(t){ };
    00028     result_type operator()(argument_type node)const{
    00029       return (node->getType()==type_);
    00030     };
    00031   };
    00032
    00033   template <class charT,class char_traits,class xml_traits>
    00034   class NodeNameChecker
    00035     : public std::unary_function<const Node<charT,char_traits,xml_traits>*,bool>{
    00036   public:
    00037     MiX_Template_Typedef(charT,char_traits,xml_traits);
    00038     typedef const node_type* argument_type;
    00039     typedef bool result_type;
    00040   private:
    00041     string_type name_,ns_;
    00042   public:
    00044     NodeNameChecker(const string_type& name,string_type ns = string_type())
    00045       : name_(name), ns_(ns) { };
    00047     result_type operator()(argument_type node)const;
    00048   };
    00049
    00050   template <class nodeT>
    00051   class NamedNodeFinder
    00052     : public std::unary_function<bool,Node<typename nodeT::char_type,
    00053                                            typename nodeT::char_traits_type,
    00054                                            typename nodeT::xml_traits_type>*> {
    00055   public:
    00056     typedef typename nodeT::char_type charT;
    00057     typedef typename nodeT::char_traits_type char_traits;
    00058     typedef typename nodeT::xml_traits_type xml_traits;
    00059
    00060     MiX_Template_Typedef(charT,char_traits,xml_traits);
    00061     typedef const node_type* argument_type;
    00062     typedef bool result_type;
    00063     bool use_ns_;
    00064     string_type name_,url_;
    00065
    00066   public:
    00074     NamedNodeFinder(const string_type& name,const string_type& ns)
    00075       { name_ = name;   url_ = ns; use_ns_ = true; }
    00076
    00083     NamedNodeFinder(const string_type& name) { name_ = name; use_ns_ = false; }
    00084
    00086     bool operator()(argument_type node){
    00087       if( node->getType()==nodeT::type() ) {
    00088         const namednode_type* named=dynamic_cast<const namednode_type*>(node);
    00089         if( !named ) return false;
    00090         if( use_ns_ ) {
    00091           if( named->getName()==name_ && named->getURL()==url_ ) return true;
    00092         } else {
    00093           if( named->getFullName()==name_ ) return true;
    00094         }
    00095       }
    00096       return false;
    00097     }
    00098   };
    00099 }
    00100
    00101 #ifndef MIX_FUNCTIONS_CPP_
    00102 #include "Functions.cpp"
    00103 #endif
    00104
    00105 #endif