diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2018-04-23 18:14:16 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-04-23 18:14:16 +0000 |
commit | 9a3a7709103a872037dcea1f3cf0b7785a3da191 (patch) | |
tree | 262538d8f7f8e5b9703a7c37e7ec2f1b477aebe3 /core/fxcrt/xml/cfx_xmlnode.h | |
parent | b557bdcbd1584a7e37f8883b0fc491e0641cfc9c (diff) | |
download | pdfium-9a3a7709103a872037dcea1f3cf0b7785a3da191.tar.xz |
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 <dsinclair@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Diffstat (limited to 'core/fxcrt/xml/cfx_xmlnode.h')
-rw-r--r-- | core/fxcrt/xml/cfx_xmlnode.h | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/core/fxcrt/xml/cfx_xmlnode.h b/core/fxcrt/xml/cfx_xmlnode.h index 288095403c..cbf89adb5e 100644 --- a/core/fxcrt/xml/cfx_xmlnode.h +++ b/core/fxcrt/xml/cfx_xmlnode.h @@ -8,6 +8,7 @@ #define CORE_FXCRT_XML_CFX_XMLNODE_H_ #include <memory> +#include <vector> #include "core/fxcrt/fx_stream.h" #include "core/fxcrt/retain_ptr.h" @@ -22,34 +23,39 @@ enum FX_XMLNODETYPE { class CFX_XMLNode { public: + using const_iterator = + std::vector<std::unique_ptr<CFX_XMLNode>>::const_iterator; + CFX_XMLNode(); virtual ~CFX_XMLNode(); virtual FX_XMLNODETYPE GetType() const = 0; virtual std::unique_ptr<CFX_XMLNode> Clone() = 0; - virtual void Save(const RetainPtr<IFX_SeekableStream>& pXMLStream) = 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* 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(); } void AppendChild(std::unique_ptr<CFX_XMLNode> pNode); void InsertChildNode(std::unique_ptr<CFX_XMLNode> 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<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 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<std::unique_ptr<CFX_XMLNode>> children_; }; #endif // CORE_FXCRT_XML_CFX_XMLNODE_H_ |