From bb47f9a442b5ea2196f18cb2df3cedd34b81b9ad Mon Sep 17 00:00:00 2001 From: dsinclair Date: Mon, 23 Apr 2018 18:35:17 +0000 Subject: Revert "Change CFX_XML Save to take a write stream" This reverts commit 9a3a7709103a872037dcea1f3cf0b7785a3da191. Reason for revert: Gerrit did not do what I expected.... Original change's description: > Change CFX_XML Save to take a write stream > > This CL changes CFX_XML to use an IFX_SeekableWriteStream instead of the more > generic IFX_SeekableStream. > > Change-Id: I6e4def380c43eca755d91ad5cb6146c2dfdaee10 > Reviewed-on: https://pdfium-review.googlesource.com/30877 > Commit-Queue: dsinclair > Reviewed-by: Tom Sepez TBR=tsepez@chromium.org,dsinclair@chromium.org,hnakashima@chromium.org Change-Id: I137e53bf93285b88ade6832dedefca66e3b61e13 No-Presubmit: true No-Tree-Checks: true No-Try: true Reviewed-on: https://pdfium-review.googlesource.com/31211 Reviewed-by: dsinclair Commit-Queue: dsinclair --- core/fxcrt/xml/cfx_xmlnode.h | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) (limited to 'core/fxcrt/xml/cfx_xmlnode.h') diff --git a/core/fxcrt/xml/cfx_xmlnode.h b/core/fxcrt/xml/cfx_xmlnode.h index cbf89adb5e..288095403c 100644 --- a/core/fxcrt/xml/cfx_xmlnode.h +++ b/core/fxcrt/xml/cfx_xmlnode.h @@ -8,7 +8,6 @@ #define CORE_FXCRT_XML_CFX_XMLNODE_H_ #include -#include #include "core/fxcrt/fx_stream.h" #include "core/fxcrt/retain_ptr.h" @@ -23,39 +22,34 @@ enum FX_XMLNODETYPE { class CFX_XMLNode { public: - using const_iterator = - std::vector>::const_iterator; - CFX_XMLNode(); virtual ~CFX_XMLNode(); virtual FX_XMLNODETYPE GetType() const = 0; virtual std::unique_ptr Clone() = 0; - virtual void Save(const RetainPtr& pXMLStream) = 0; + virtual void Save(const RetainPtr& pXMLStream) = 0; CFX_XMLNode* GetRoot(); CFX_XMLNode* GetParent() const { return parent_.Get(); } - CFX_XMLNode* GetNextSibling() const { return next_sibling_; } - bool HasChildren() const { return !children_.empty(); } - const_iterator begin() const { return children_.begin(); } - const_iterator end() const { return children_.end(); } + CFX_XMLNode* GetFirstChild() const { return first_child_.get(); } + CFX_XMLNode* GetNextSibling() const { return next_sibling_.get(); } void AppendChild(std::unique_ptr pNode); void InsertChildNode(std::unique_ptr pNode, int32_t index); void RemoveChildNode(CFX_XMLNode* pNode); void DeleteChildren(); - // Note |root| must not have any children. - void MoveChildrenTo(CFX_XMLNode* root); 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 parent_; - // The next_sibling is owned by the vector. We don't use an UnownedPtr - // because we don't know the destruction order of the vector. - CFX_XMLNode* next_sibling_; - std::vector> children_; + UnownedPtr last_child_; + UnownedPtr prev_sibling_; + std::unique_ptr first_child_; + std::unique_ptr next_sibling_; }; #endif // CORE_FXCRT_XML_CFX_XMLNODE_H_ -- cgit v1.2.3