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