• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright David Abrahams 2004. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 #include <boost/python/module.hpp>
5 #define BOOST_ENABLE_ASSERT_HANDLER
6 #include <boost/assert.hpp>
7 
8 #include <boost/python/def.hpp>
9 #include <boost/python/class.hpp>
10 #include <boost/python/dict.hpp>
11 #include <exception>
12 #include <string>
13 
14 using namespace boost::python;
15 
new_dict()16 object new_dict()
17 {
18     return dict();
19 }
20 
data_dict()21 object data_dict()
22 {
23     dict tmp1;
24     tmp1["key1"] = "value1";
25 
26     dict tmp2;
27     tmp2["key2"] = "value2";
28     tmp1[1] = tmp2;
29     return tmp1;
30 }
31 
dict_from_sequence(object sequence)32 object dict_from_sequence(object sequence)
33 {
34     return dict(sequence);
35 }
36 
dict_keys(dict data)37 object dict_keys(dict data)
38 {
39     return data.keys();
40 }
41 
dict_values(dict data)42 object dict_values(dict data)
43 {
44     return data.values();
45 }
46 
dict_items(dict data)47 object dict_items(dict data)
48 {
49     return data.items();
50 }
51 
work_with_dict(dict data1,dict data2)52 void work_with_dict(dict data1, dict data2)
53 {
54     if (!data1.has_key("k1")) {
55         throw std::runtime_error("dict does not have key 'k1'");
56     }
57     data1.update(data2);
58 }
59 
test_templates(object print)60 void test_templates(object print)
61 {
62     std::string key = "key";
63 
64     dict tmp;
65     tmp[1] = "a test string";
66     print(tmp.get(1));
67     //print(tmp[1]);
68     tmp[1.5] = 13;
69     print(tmp.get(1.5));
70     print(tmp.get(44));
71     print(tmp);
72     print(tmp.get(2,"default"));
73     print(tmp.setdefault(3,"default"));
74 
75     BOOST_ASSERT(!tmp.has_key(key));
76     //print(tmp[3]);
77 }
78 
BOOST_PYTHON_MODULE(dict_ext)79 BOOST_PYTHON_MODULE(dict_ext)
80 {
81     def("new_dict", new_dict);
82     def("data_dict", data_dict);
83     def("dict_keys", dict_keys);
84     def("dict_values", dict_values);
85     def("dict_items", dict_items);
86     def("dict_from_sequence", dict_from_sequence);
87     def("work_with_dict", work_with_dict);
88     def("test_templates", test_templates);
89 }
90 
91 #include "module_tail.cpp"
92