1 // Copyright (c) 2009 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that
3 // can be found in the LICENSE file.
4
5 #include <map>
6
7 #include "include/internal/cef_string_map.h"
8
9 #include "base/logging.h"
10
11 typedef std::map<CefString, CefString> StringMap;
12
cef_string_map_alloc()13 CEF_EXPORT cef_string_map_t cef_string_map_alloc() {
14 return new StringMap;
15 }
16
cef_string_map_size(cef_string_map_t map)17 CEF_EXPORT size_t cef_string_map_size(cef_string_map_t map) {
18 DCHECK(map);
19 StringMap* impl = reinterpret_cast<StringMap*>(map);
20 return impl->size();
21 }
22
cef_string_map_find(cef_string_map_t map,const cef_string_t * key,cef_string_t * value)23 CEF_EXPORT int cef_string_map_find(cef_string_map_t map,
24 const cef_string_t* key,
25 cef_string_t* value) {
26 DCHECK(map);
27 DCHECK(value);
28 StringMap* impl = reinterpret_cast<StringMap*>(map);
29 StringMap::const_iterator it = impl->find(CefString(key));
30 if (it == impl->end())
31 return 0;
32
33 const CefString& val = it->second;
34 return cef_string_set(val.c_str(), val.length(), value, true);
35 }
36
cef_string_map_key(cef_string_map_t map,size_t index,cef_string_t * key)37 CEF_EXPORT int cef_string_map_key(cef_string_map_t map,
38 size_t index,
39 cef_string_t* key) {
40 DCHECK(map);
41 DCHECK(key);
42 StringMap* impl = reinterpret_cast<StringMap*>(map);
43 DCHECK_LT(index, impl->size());
44 if (index >= impl->size())
45 return 0;
46
47 StringMap::const_iterator it = impl->begin();
48 for (size_t ct = 0; it != impl->end(); ++it, ct++) {
49 if (ct == index)
50 return cef_string_set(it->first.c_str(), it->first.length(), key, true);
51 }
52 return 0;
53 }
54
cef_string_map_value(cef_string_map_t map,size_t index,cef_string_t * value)55 CEF_EXPORT int cef_string_map_value(cef_string_map_t map,
56 size_t index,
57 cef_string_t* value) {
58 DCHECK(map);
59 DCHECK(value);
60 StringMap* impl = reinterpret_cast<StringMap*>(map);
61 DCHECK_LT(index, impl->size());
62 if (index >= impl->size())
63 return 0;
64
65 StringMap::const_iterator it = impl->begin();
66 for (size_t ct = 0; it != impl->end(); ++it, ct++) {
67 if (ct == index) {
68 return cef_string_set(it->second.c_str(), it->second.length(), value,
69 true);
70 }
71 }
72 return 0;
73 }
74
cef_string_map_append(cef_string_map_t map,const cef_string_t * key,const cef_string_t * value)75 CEF_EXPORT int cef_string_map_append(cef_string_map_t map,
76 const cef_string_t* key,
77 const cef_string_t* value) {
78 DCHECK(map);
79 StringMap* impl = reinterpret_cast<StringMap*>(map);
80 impl->insert(std::make_pair(CefString(key), CefString(value)));
81 return 1;
82 }
83
cef_string_map_clear(cef_string_map_t map)84 CEF_EXPORT void cef_string_map_clear(cef_string_map_t map) {
85 DCHECK(map);
86 StringMap* impl = reinterpret_cast<StringMap*>(map);
87 impl->clear();
88 }
89
cef_string_map_free(cef_string_map_t map)90 CEF_EXPORT void cef_string_map_free(cef_string_map_t map) {
91 DCHECK(map);
92 StringMap* impl = reinterpret_cast<StringMap*>(map);
93 delete impl;
94 }
95