• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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