00001
00002
00003 #ifndef MIX_NODE_H_
00004 #define MIX_NODE_H_
00005
00006 #include "classes.h"
00007 #include "misc.h"
00008 #include "DefaultXMLTraits.h"
00009
00010 namespace MiX{
00011
00012 template <class charT,class char_traits,class xml_traits>
00013 class Node{
00014 public:
00015 MiX_Template_Typedef(charT,char_traits,xml_traits);
00016 typedef typename nodelist_type::iterator nodelist_iter;
00017 typedef NamedNode<charT,char_traits,xml_traits> this_type;
00018 typedef NodeContainer<charT,char_traits,xml_traits> nodecontainer_type;
00019 private:
00020 NodeContainer<charT,char_traits,xml_traits>* parent_;
00021 protected:
00027 Node(const this_type& src){ };
00029 Node(){ parent_ = 0; };
00031 void setParent(nodecontainer_type& parent){ parent_ = &parent; };
00032 public:
00034 virtual ~Node()throw();
00036 virtual void destroy()throw() { delete this; } ;
00038 const nodecontainer_type& getParent() const;
00040 nodecontainer_type& getParent();
00042 virtual NodeType getType() const = 0;
00044 virtual string_type toString(bool indent=false,int indent_off=0)const = 0;
00046 virtual node_type& clone(nodecontainer_type& parent,const nodelist_iter& it) const=0;
00047 friend class DOM_Parser<charT,char_traits,xml_traits>;
00048 friend class NodeContainer<charT,char_traits,xml_traits>;
00049 };
00050 }
00051
00052 #ifndef MIX_NODE_CPP_
00053 #include "Node.cpp"
00054 #endif
00055
00056 #endif