// -*- mode: c++ -*-

#ifndef MIX_NAMEDNODE_H_
#define MIX_NAMEDNODE_H_

#include "Node.h"

namespace MiX{

  template <class charT,class char_traits,class xml_traits>
  class NamedNode : virtual public Node<charT,char_traits,xml_traits>{
  public:
    MiX_Template_Typedef(charT,char_traits,xml_traits);
    typedef NamedNode<charT,char_traits,xml_traits> this_type;
  private:
    string_type name_;
    string_type ns_;
    /**
     * コピーコンストラクタ
     *
     * クライアントはこれを呼び出せない。つまりコピーできない。
     */
    NamedNode(const this_type& src){ };
  protected:
    ///コンストラクタ
    NamedNode(const string_type& name,const string_type& ns = string_type())
      { setName( name,ns ); }
  public:
    ///デストラクタ
    virtual ~NamedNode()throw(){ };
    ///名前を設定します
    void setName(const string_type& name,const string_type& ns = string_type()) 
      { name_ = name; ns_ = ns_; }
    ///名前空間のURLを設定します
    void setURL(const string_type& url) { ns_ = url; }
    ///名前を得ます
    string_type getName() const { return name_; }
    ///名前空間のURLを得ます
    string_type getURL() const { return ns_; }
    ///FullName("nsname:name")を得ます
    virtual string_type getFullName() const =0;
  };
}


#endif
