#ifndef JEZUK_DOM_CHARACTERDATA_H #define JEZUK_DOM_CHARACTERDATA_H //////////////////////////// // C++ DOM definition // // $Id$ //////////////////////////// #include namespace DOM { template class CharacterData_impl; template class CharacterData : public Node { public: CharacterData() : Node() { } explicit CharacterData(CharacterData_impl* impl) : Node(impl) { } CharacterData(const CharacterData& rhs) : Node(rhs) { } explicit CharacterData(const Node& rhs) : Node(rhs) { if(dynamic_cast*>(rhs.impl()) == 0) throw std::bad_cast(); } // CharacterData stringT getData() const { return cdImpl()->getData(); } void setData(const stringT& data) const { cdImpl()->throwIfReadOnly(); cdImpl()->setData(data); } // setData int getLength() const { return cdImpl()->getLength(); } stringT substringData(int offset, int count) const { return cdImpl()->substringData(offset, count); } void appendData(const stringT& arg) { cdImpl()->throwIfReadOnly(); cdImpl()->appendData(arg); } // appendData void insertData(int offset, const stringT& arg) { cdImpl()->throwIfReadOnly(); chImpl()->insertData(offset, arg); } // insertData void deleteData(int offset, int count) { cdImpl()->throwIfReadOnly(); chImpl()->deleteData(offset, count); } // deleteData void replaceData(int offset, int count, const stringT& arg) { cdImpl()->throwIfReadOnly(); chImpl()->replaceData(offset, count); } // replaceData private: CharacterData_impl* cdImpl() { return dynamic_cast*>(impl()); } }; // class CharacterData //////////////////////////////////////////////////////////////////// template class CharacterData_impl : virtual public Node_impl { public: virtual ~CharacterData_impl () { } ////////////////////////////////////////////////////////////////// // DOM::CharacterData methods virtual stringT getData() const = 0; virtual void setData(const stringT& data) = 0; virtual int getLength() const = 0; virtual stringT substringData(int offset, int count) const = 0; virtual void appendData(const stringT& arg) = 0; virtual void insertData(int offset, const stringT& arg) = 0; virtual void deleteData(int offset, int count) = 0; virtual void replaceData(int offset, int count, const stringT& arg) = 0; }; // CharacterData_impl } // namespace DOM #endif