summaryrefslogtreecommitdiff
path: root/core/fxcrt/xml/cfx_xmlnode.h
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2018-05-02 16:02:03 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-02 16:02:03 +0000
commit70180648ffd01dd3716871758411d2031aaaebbe (patch)
tree6cc1d7aa3df8c3e343a1ef6f7e032bae8499f6db /core/fxcrt/xml/cfx_xmlnode.h
parent8ab2b2b2869f769dc169b4a96bb67ec596d5278b (diff)
downloadpdfium-70180648ffd01dd3716871758411d2031aaaebbe.tar.xz
Add a CFX_XMLDocument class.
This CL adds a CFX_XMLDocument to act as the XML node container. All nodes are now owned by the document and the document is returned by the CFX_XMLParser. Classes which parse XML files now store the document instead of the root node. BUG: chromium:835636 Change-Id: I1e07d6115cf14714911d6fd4c3fa920c94fd5faf Reviewed-on: https://pdfium-review.googlesource.com/31313 Reviewed-by: Henrique Nakashima <hnakashima@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'core/fxcrt/xml/cfx_xmlnode.h')
-rw-r--r--core/fxcrt/xml/cfx_xmlnode.h32
1 files changed, 17 insertions, 15 deletions
diff --git a/core/fxcrt/xml/cfx_xmlnode.h b/core/fxcrt/xml/cfx_xmlnode.h
index 4c98a3b51a..95dc0acce9 100644
--- a/core/fxcrt/xml/cfx_xmlnode.h
+++ b/core/fxcrt/xml/cfx_xmlnode.h
@@ -19,39 +19,41 @@ enum FX_XMLNODETYPE {
FX_XMLNODE_CharData,
};
+class CFX_XMLDocument;
+
class CFX_XMLNode {
public:
CFX_XMLNode();
virtual ~CFX_XMLNode();
virtual FX_XMLNODETYPE GetType() const = 0;
- virtual std::unique_ptr<CFX_XMLNode> Clone() = 0;
+ virtual CFX_XMLNode* Clone(CFX_XMLDocument* doc) = 0;
virtual void Save(const RetainPtr<IFX_SeekableWriteStream>& pXMLStream) = 0;
CFX_XMLNode* GetRoot();
- CFX_XMLNode* GetParent() const { return parent_.Get(); }
- CFX_XMLNode* GetFirstChild() const { return first_child_.get(); }
- CFX_XMLNode* GetNextSibling() const { return next_sibling_.get(); }
+ CFX_XMLNode* GetParent() const { return parent_; }
+ CFX_XMLNode* GetFirstChild() const { return first_child_; }
+ CFX_XMLNode* GetNextSibling() const { return next_sibling_; }
- void AppendChild(std::unique_ptr<CFX_XMLNode> pNode);
- void InsertChildNode(std::unique_ptr<CFX_XMLNode> pNode, int32_t index);
+ void AppendChild(CFX_XMLNode* pNode);
+ void InsertChildNode(CFX_XMLNode* pNode, int32_t index);
void RemoveChildNode(CFX_XMLNode* pNode);
void DeleteChildren();
- CFX_XMLNode* GetLastChildForTesting() const { return last_child_.Get(); }
- CFX_XMLNode* GetPrevSiblingForTesting() const { return prev_sibling_.Get(); }
+ CFX_XMLNode* GetLastChildForTesting() const { return last_child_; }
+ CFX_XMLNode* GetPrevSiblingForTesting() const { return prev_sibling_; }
protected:
WideString EncodeEntities(const WideString& value);
private:
- // A node owns its first child and it owns its next sibling. The rest
- // are unowned pointers.
- UnownedPtr<CFX_XMLNode> parent_;
- UnownedPtr<CFX_XMLNode> last_child_;
- UnownedPtr<CFX_XMLNode> prev_sibling_;
- std::unique_ptr<CFX_XMLNode> first_child_;
- std::unique_ptr<CFX_XMLNode> next_sibling_;
+ // The nodes are owned by the XML document. We do not know what order the
+ // nodes will be destroyed in so they can not be UnownedPtrs.
+ CFX_XMLNode* parent_ = nullptr;
+ CFX_XMLNode* first_child_ = nullptr;
+ CFX_XMLNode* last_child_ = nullptr;
+ CFX_XMLNode* next_sibling_ = nullptr;
+ CFX_XMLNode* prev_sibling_ = nullptr;
};
#endif // CORE_FXCRT_XML_CFX_XMLNODE_H_