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

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

MiXに対してSun Jul 20 00:45:28 2003に生成されました。 doxygen1.3-rc3