include/HTMLParser/Allocator.hpp

Go to the documentation of this file.
00001 #ifndef hpp_HTMLAllocators_hpp
00002 #define hpp_HTMLAllocators_hpp
00003 
00004 // We need elements
00005 #include "Elements.hpp"
00006 // We need tree too
00007 #include "../Tree/NTree.hpp"
00008 // We need the DOM declaration too
00009 #include "../HTMLParser/DOM.hpp"
00010 
00011 namespace HTML
00012 {
00013     namespace Elements
00014     {
00021         namespace Allocators
00022         {
00024             class BaseAllocator
00025             {
00026             protected:
00028                 BaseAllocator() {}
00029 
00030             public:
00032                 virtual HTML::Attributes::Attribute * getAttribute(HTML::GenericAttribute::AttributeID type, uint32 startPos = 0, uint32 endPos = 0, uint32 startCont = 0, uint32 endCont = 0) const volatile = 0;
00034                 virtual HTML::Elements::Element * getElement(HTML::GenericElement::ElementID type, uint32 startPos) const volatile = 0;
00036                 virtual DOM::DocumentType *     getDocumentType(const DOM::DOMString & input) const volatile = 0;
00038                 virtual DOM::DocumentType *     getDocumentType(const DOM::DOMString & qualifiedName, const DOM::DOMString & publicId, const DOM::DOMString & systemId) const volatile = 0;
00040                 virtual DOMTree::Node *         getElementNode(HTML::Elements::Element * element, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00042                 virtual DOMTree::Node *         getTextNode(const Strings::FastString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00044                 virtual DOMTree::Node *         getCommentNode(const Strings::FastString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00046                 virtual DOMTree::Node *         getTextNode(const DOM::DOMString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00048                 virtual DOMTree::Node *         getCommentNode(const DOM::DOMString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00050                 virtual DOMTree::Node *         getAttrNode(HTML::Attributes::Attribute * attrib, const DOM::DOMString & value, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00052                 virtual DOMTree::Node *         getDocumentNode(const DOM::DOMString & namespaceURI, const DOM::DOMString & qualifiedName, const DOM::DocumentType * docType, DOMTree::Node * ref, const DOM::Element * htmlElement, Tree::DeleterObject<const DOM::Node *> &) const volatile = 0;
00054                 virtual void returnNode(const DOM::Node *) const volatile = 0;
00056                 virtual void returnAttribute(const HTML::Attributes::Attribute * attribute) const volatile = 0;
00058                 virtual void returnElement(const HTML::Elements::Element * element) const volatile = 0;
00060                 virtual void returnDocumentType(const DOM::DocumentType * docType) const volatile = 0;
00061             };
00062 
00064             class SimpleHeap : public BaseAllocator
00065             {
00066             public:
00068                 SimpleHeap() {}
00069 
00070             public:
00072                 virtual HTML::Attributes::Attribute * getAttribute(HTML::GenericAttribute::AttributeID type, uint32 startPos = 0, uint32 endPos = 0, uint32 startCont = 0, uint32 endCont = 0) const volatile
00073                 {
00074                     return new HTML::Attributes::Attribute(type, startPos, endPos, startCont, endCont);
00075                 }
00077                 virtual HTML::Elements::Element * getElement(HTML::GenericElement::ElementID type, uint32 startPos) const volatile
00078                 {
00079                     return new HTML::Elements::Element(type, startPos);
00080                 }
00082                 virtual DOM::DocumentType *         getDocumentType(const DOM::DOMString & input) const volatile
00083                 {
00084                     return new DOM::DocumentType(input);
00085                 }
00087                 virtual DOM::DocumentType *         getDocumentType(const DOM::DOMString & qualifiedName, const DOM::DOMString & publicId, const DOM::DOMString & systemId) const volatile
00088                 {
00089                     return new DOM::DocumentType(qualifiedName, publicId, systemId);
00090                 }
00091 
00093                 virtual DOMTree::Node * getElementNode(HTML::Elements::Element * element, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00094                 {
00095                     DOM::Element * newElement = new DOM::Element(element);
00096                     if (newElement == 0) return 0;
00097                     DOMTree::Node * node = new DOMTree::Node(newElement, root, deleter);
00098                     if (node) newElement->setTreeNode(node);
00099                     else delete newElement;
00100                     return node;
00101                 }
00103                 virtual DOMTree::Node * getTextNode(const Strings::FastString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00104                 {
00105                     DOM::Text * newText = new DOM::Text(text);
00106                     if (newText == 0) return 0;
00107                     DOMTree::Node * node = new DOMTree::Node(newText, root, deleter);
00108                     if (node) newText->setTreeNode(node);
00109                     else delete newText;
00110                     return node;
00111                 }
00113                 virtual DOMTree::Node * getCommentNode(const Strings::FastString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00114                 {
00115                     DOM::Comment * newComment = new DOM::Comment(text);
00116                     if (newComment == 0) return 0;
00117                     DOMTree::Node * node = new DOMTree::Node(newComment, root, deleter);
00118                     if (node) newComment->setTreeNode(node);
00119                     else delete newComment;
00120                     return node;
00121                 }
00123                 virtual DOMTree::Node * getTextNode(const DOM::DOMString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00124                 {
00125                     DOM::Text * newText = new DOM::Text(text);
00126                     if (newText == 0) return 0;
00127                     DOMTree::Node * node = new DOMTree::Node(newText, root, deleter);
00128                     if (node) newText->setTreeNode(node);
00129                     else delete newText;
00130                     return node;
00131                 }
00133                 virtual DOMTree::Node * getCommentNode(const DOM::DOMString & text, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00134                 {
00135                     DOM::Comment * newComment = new DOM::Comment(text);
00136                     if (newComment == 0) return 0;
00137                     DOMTree::Node * node = new DOMTree::Node(newComment, root, deleter);
00138                     if (node) newComment->setTreeNode(node);
00139                     else delete newComment;
00140                     return node;
00141                 }
00143                 virtual DOMTree::Node * getAttrNode(HTML::Attributes::Attribute * attrib, const DOM::DOMString & value, DOMTree::Node * root, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile
00144                 {
00145                     DOM::Attr * newAttr = new DOM::Attr(attrib, value);
00146                     if (newAttr == 0) return 0;
00147                     DOMTree::Node * node = new DOMTree::Node(newAttr, root, deleter);
00148                     if (node) newAttr->setTreeNode(node);
00149                     else delete newAttr;
00150                     return node;
00151                 }
00153                 virtual DOMTree::Node * getDocumentNode(const DOM::DOMString & namespaceURI, const DOM::DOMString & qualifiedName, const DOM::DocumentType * docType, DOMTree::Node * ref, const DOM::Element * htmlElement, Tree::DeleterObject<const DOM::Node *> & deleter) const volatile 
00154                 {
00155                     DOM::Document * newDocument = new DOM::Document(namespaceURI, qualifiedName, docType, this, ref, htmlElement);
00156                     if (newDocument == 0) return 0;
00157                     if (ref)
00158                     {
00159                         // Check if we need to clean the existing node 
00160                         DOM::Node * node = const_cast<DOM::Node*>(ref->getData());
00161                         if (node) node->returnToAllocator(this);
00162                         ref->getData() = newDocument;
00163                     }
00164                     else
00165                     {
00166                         ref = new DOMTree::Node(newDocument, 0, deleter);
00167                         if (ref) newDocument->setTreeNode(ref);
00168                         else delete newDocument;
00169                     }
00170 
00171                     return ref;
00172                 }
00174                 virtual void returnNode(const DOM::Node * node) const volatile throw()
00175                 {
00176                     delete const_cast<DOM::Node *>(node);
00177                 }
00179                 virtual void returnAttribute(const HTML::Attributes::Attribute * attribute) const volatile throw()
00180                 {
00181                     delete const_cast<HTML::Attributes::Attribute*>(attribute);
00182                 }
00184                 virtual void returnElement(const HTML::Elements::Element * element) const volatile throw()
00185                 {
00186                     delete const_cast<HTML::Elements::Element *>(element);
00187                 }
00189                 virtual void returnDocumentType(const DOM::DocumentType * docType) const volatile throw()
00190                 {
00191                     delete const_cast<DOM::DocumentType *>(docType);
00192                 }
00193 
00194             };  
00195 
00196 
00197         }
00198     }
00199 }
00200 
00201 #endif

(C) An X-Ryl669 project 2007

This document describes Unlimited Zooming Interface source code. UZI stands for Unlimited Zooming Interface, and source code license is