xref: /aosp_15_r20/external/pdfium/fxjs/xfa/cfxjse_mapmodule.cpp (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1 // Copyright 2020 The PDFium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 
7 #include "fxjs/xfa/cfxjse_mapmodule.h"
8 
9 #include "third_party/base/containers/contains.h"
10 #include "xfa/fxfa/parser/cxfa_measurement.h"
11 
12 CFXJSE_MapModule::CFXJSE_MapModule() = default;
13 
14 CFXJSE_MapModule::~CFXJSE_MapModule() = default;
15 
SetValue(uint32_t key,int32_t value)16 void CFXJSE_MapModule::SetValue(uint32_t key, int32_t value) {
17   m_StringMap.erase(key);
18   m_MeasurementMap.erase(key);
19   m_ValueMap[key] = value;
20 }
21 
SetString(uint32_t key,const WideString & wsString)22 void CFXJSE_MapModule::SetString(uint32_t key, const WideString& wsString) {
23   m_ValueMap.erase(key);
24   m_MeasurementMap.erase(key);
25   m_StringMap[key] = wsString;
26 }
27 
SetMeasurement(uint32_t key,const CXFA_Measurement & measurement)28 void CFXJSE_MapModule::SetMeasurement(uint32_t key,
29                                       const CXFA_Measurement& measurement) {
30   m_ValueMap.erase(key);
31   m_StringMap.erase(key);
32   m_MeasurementMap[key] = measurement;
33 }
34 
GetValue(uint32_t key) const35 absl::optional<int32_t> CFXJSE_MapModule::GetValue(uint32_t key) const {
36   auto it = m_ValueMap.find(key);
37   if (it == m_ValueMap.end())
38     return absl::nullopt;
39   return it->second;
40 }
41 
GetString(uint32_t key) const42 absl::optional<WideString> CFXJSE_MapModule::GetString(uint32_t key) const {
43   auto it = m_StringMap.find(key);
44   if (it == m_StringMap.end())
45     return absl::nullopt;
46   return it->second;
47 }
48 
GetMeasurement(uint32_t key) const49 absl::optional<CXFA_Measurement> CFXJSE_MapModule::GetMeasurement(
50     uint32_t key) const {
51   auto it = m_MeasurementMap.find(key);
52   if (it == m_MeasurementMap.end())
53     return absl::nullopt;
54   return it->second;
55 }
56 
HasKey(uint32_t key) const57 bool CFXJSE_MapModule::HasKey(uint32_t key) const {
58   return pdfium::Contains(m_ValueMap, key) ||
59          pdfium::Contains(m_StringMap, key) ||
60          pdfium::Contains(m_MeasurementMap, key);
61 }
62 
RemoveKey(uint32_t key)63 void CFXJSE_MapModule::RemoveKey(uint32_t key) {
64   m_ValueMap.erase(key);
65   m_StringMap.erase(key);
66   m_MeasurementMap.erase(key);
67 }
68 
MergeDataFrom(const CFXJSE_MapModule * pSrc)69 void CFXJSE_MapModule::MergeDataFrom(const CFXJSE_MapModule* pSrc) {
70   for (const auto& pair : pSrc->m_ValueMap)
71     SetValue(pair.first, pair.second);
72 
73   for (const auto& pair : pSrc->m_StringMap)
74     SetString(pair.first, pair.second);
75 
76   for (const auto& pair : pSrc->m_MeasurementMap)
77     SetMeasurement(pair.first, pair.second);
78 }
79