summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/fxcrt/xml/cxml_attrmap.cpp50
-rw-r--r--core/fxcrt/xml/cxml_attrmap.h33
-rw-r--r--core/fxcrt/xml/cxml_element.cpp31
-rw-r--r--core/fxcrt/xml/cxml_element.h13
4 files changed, 30 insertions, 97 deletions
diff --git a/core/fxcrt/xml/cxml_attrmap.cpp b/core/fxcrt/xml/cxml_attrmap.cpp
deleted file mode 100644
index 733bbeaa71..0000000000
--- a/core/fxcrt/xml/cxml_attrmap.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "core/fxcrt/xml/cxml_attrmap.h"
-
-#include "third_party/base/ptr_util.h"
-#include "third_party/base/stl_util.h"
-
-CXML_AttrMap::CXML_AttrMap() {}
-
-CXML_AttrMap::~CXML_AttrMap() {}
-
-const WideString* CXML_AttrMap::Lookup(const ByteString& space,
- const ByteString& name) const {
- if (!m_pMap)
- return nullptr;
-
- for (const auto& item : *m_pMap) {
- if (item.Matches(space, name))
- return &item.m_Value;
- }
- return nullptr;
-}
-
-void CXML_AttrMap::SetAt(const ByteString& space,
- const ByteString& name,
- const WideString& value) {
- if (!m_pMap)
- m_pMap = pdfium::MakeUnique<std::vector<CXML_AttrItem>>();
-
- for (CXML_AttrItem& item : *m_pMap) {
- if (item.Matches(space, name)) {
- item.m_Value = value;
- return;
- }
- }
-
- m_pMap->push_back({space, name, WideString(value)});
-}
-
-int CXML_AttrMap::GetSize() const {
- return m_pMap ? pdfium::CollectionSize<int>(*m_pMap) : 0;
-}
-
-CXML_AttrItem& CXML_AttrMap::GetAt(int index) const {
- return (*m_pMap)[index];
-}
diff --git a/core/fxcrt/xml/cxml_attrmap.h b/core/fxcrt/xml/cxml_attrmap.h
deleted file mode 100644
index a09522b53c..0000000000
--- a/core/fxcrt/xml/cxml_attrmap.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FXCRT_XML_CXML_ATTRMAP_H_
-#define CORE_FXCRT_XML_CXML_ATTRMAP_H_
-
-#include <memory>
-#include <vector>
-
-#include "core/fxcrt/fx_string.h"
-#include "core/fxcrt/xml/cxml_attritem.h"
-
-class CXML_AttrMap {
- public:
- CXML_AttrMap();
- ~CXML_AttrMap();
-
- const WideString* Lookup(const ByteString& space,
- const ByteString& name) const;
- int GetSize() const;
- CXML_AttrItem& GetAt(int index) const;
-
- void SetAt(const ByteString& space,
- const ByteString& name,
- const WideString& value);
-
- std::unique_ptr<std::vector<CXML_AttrItem>> m_pMap;
-};
-
-#endif // CORE_FXCRT_XML_CXML_ATTRMAP_H_
diff --git a/core/fxcrt/xml/cxml_element.cpp b/core/fxcrt/xml/cxml_element.cpp
index ad9859e2c6..1d42e8eac3 100644
--- a/core/fxcrt/xml/cxml_element.cpp
+++ b/core/fxcrt/xml/cxml_element.cpp
@@ -61,9 +61,9 @@ ByteString CXML_Element::GetNamespaceURI(const ByteString& qName) const {
do {
const WideString* pwsSpace;
if (qName.IsEmpty())
- pwsSpace = pElement->m_AttrMap.Lookup("", "xmlns");
+ pwsSpace = pElement->Lookup("", "xmlns");
else
- pwsSpace = pElement->m_AttrMap.Lookup("xmlns", qName);
+ pwsSpace = pElement->Lookup("xmlns", qName);
if (pwsSpace)
return pwsSpace->UTF8Encode();
@@ -76,10 +76,10 @@ void CXML_Element::GetAttrByIndex(size_t index,
ByteString* space,
ByteString* name,
WideString* value) const {
- if (index >= static_cast<size_t>(m_AttrMap.GetSize()))
+ if (index >= m_AttrMap.size())
return;
- CXML_AttrItem& item = m_AttrMap.GetAt(index);
+ const CXML_AttrItem& item = m_AttrMap[index];
*space = item.m_QSpaceName;
*name = item.m_AttrName;
*value = item.m_Value;
@@ -91,8 +91,7 @@ WideString CXML_Element::GetAttrValue(const ByteStringView& name) const {
SplitQualifiedName(name, &bsSpace, &bsName);
WideString attr;
- const WideString* pValue =
- m_AttrMap.Lookup(ByteString(bsSpace), ByteString(bsName));
+ const WideString* pValue = Lookup(ByteString(bsSpace), ByteString(bsName));
if (pValue)
attr = *pValue;
return attr;
@@ -103,8 +102,7 @@ int CXML_Element::GetAttrInteger(const ByteStringView& name) const {
ByteStringView bsName;
SplitQualifiedName(name, &bsSpace, &bsName);
- const WideString* pwsValue =
- m_AttrMap.Lookup(ByteString(bsSpace), ByteString(bsName));
+ const WideString* pwsValue = Lookup(ByteString(bsSpace), ByteString(bsName));
return pwsValue ? pwsValue->GetInteger() : 0;
}
@@ -140,7 +138,13 @@ CXML_Element* CXML_Element::GetElement(const ByteStringView& space,
void CXML_Element::SetAttribute(const ByteString& space,
const ByteString& name,
const WideString& value) {
- m_AttrMap.SetAt(space, name, value);
+ for (CXML_AttrItem& item : m_AttrMap) {
+ if (item.Matches(space, name)) {
+ item.m_Value = value;
+ return;
+ }
+ }
+ m_AttrMap.push_back({space, name, WideString(value)});
}
// static
@@ -150,3 +154,12 @@ bool CXML_Element::MatchesElement(const CXML_Element* pKid,
return pKid && pKid->m_TagName == tag &&
(space.IsEmpty() || pKid->m_QSpaceName == space);
}
+
+const WideString* CXML_Element::Lookup(const ByteString& space,
+ const ByteString& name) const {
+ for (const CXML_AttrItem& item : m_AttrMap) {
+ if (item.Matches(space, name))
+ return &item.m_Value;
+ }
+ return nullptr;
+}
diff --git a/core/fxcrt/xml/cxml_element.h b/core/fxcrt/xml/cxml_element.h
index 038fa648d2..d3049d77a4 100644
--- a/core/fxcrt/xml/cxml_element.h
+++ b/core/fxcrt/xml/cxml_element.h
@@ -11,7 +11,7 @@
#include <utility>
#include <vector>
-#include "core/fxcrt/xml/cxml_attrmap.h"
+#include "core/fxcrt/xml/cxml_attritem.h"
#include "core/fxcrt/xml/cxml_object.h"
class CXML_Element : public CXML_Object {
@@ -30,7 +30,7 @@ class CXML_Element : public CXML_Object {
ByteString GetTagName() const;
ByteString GetNamespaceURI(const ByteString& qName) const;
const CXML_Element* GetParent() const { return m_pParent.Get(); }
- size_t CountAttrs() const { return m_AttrMap.GetSize(); }
+ size_t CountAttrs() const { return m_AttrMap.size(); }
void GetAttrByIndex(size_t index,
ByteString* space,
ByteString* name,
@@ -60,10 +60,13 @@ class CXML_Element : public CXML_Object {
const ByteStringView& space,
const ByteStringView& tag);
+ const WideString* Lookup(const ByteString& space,
+ const ByteString& name) const;
+
UnownedPtr<const CXML_Element> const m_pParent;
- ByteString m_QSpaceName;
- ByteString m_TagName;
- CXML_AttrMap m_AttrMap;
+ const ByteString m_QSpaceName;
+ const ByteString m_TagName;
+ std::vector<CXML_AttrItem> m_AttrMap;
std::vector<std::unique_ptr<CXML_Object>> m_Children;
};