]>
Commit | Line | Data |
---|---|---|
bd3239d2 MF |
1 | class QString { public: inline QString(const char *ch); }; |
2 | class QGenericArgument {}; | |
3 | class QWebPage { | |
4 | public: | |
5 | template <typename T> inline void qt_check_for_QOBJECT_macro(const T &_q_argument); | |
6 | class ExtensionOption {}; | |
7 | }; | |
8 | namespace boost { | |
9 | namespace mpl { | |
10 | template< bool C_ > struct bool_; | |
11 | typedef bool_<false> false_; | |
12 | template< bool C_ > struct bool_ { | |
13 | static const bool value = C_; | |
14 | }; | |
15 | template< typename T, T N > struct integral_c { | |
16 | static const T value = N; | |
17 | }; | |
18 | } | |
19 | template <class T, T val> struct integral_constant | |
20 | : public mpl::integral_c<T, val> | |
21 | {}; | |
22 | ||
23 | namespace detail { | |
24 | template <typename T> struct cv_traits_imp {}; | |
25 | } | |
26 | ||
27 | template< typename T > struct is_reference : ::boost::integral_constant<bool,false> {}; | |
28 | template< typename T > struct remove_cv { | |
29 | typedef typename boost::detail::cv_traits_imp<T*> type; | |
30 | }; | |
31 | template< typename T > struct is_integral : ::boost::integral_constant<bool,false> {}; | |
32 | template< typename T > struct is_float : ::boost::integral_constant<bool,false> {}; | |
33 | namespace type_traits { | |
34 | template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false> struct ice_or; | |
35 | template <> struct ice_or<false, false, false, false, false, false, false> { | |
36 | static const bool value = false; | |
37 | }; | |
38 | } | |
39 | ||
40 | namespace detail { | |
41 | template< typename T > struct is_arithmetic_impl { | |
42 | static const bool value = (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_float<T>::value >::value); | |
43 | }; | |
44 | } | |
45 | ||
46 | template< typename T > struct is_arithmetic : ::boost::integral_constant<bool,::boost::detail::is_arithmetic_impl<T>::value> {}; | |
47 | ||
48 | namespace type_traits { | |
49 | template <typename T> struct is_mem_fun_pointer_impl { | |
50 | static const bool value = false; | |
51 | }; | |
52 | template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true> struct ice_and; | |
53 | template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7> struct ice_and { | |
54 | static const bool value = false; | |
55 | }; | |
56 | template <bool b> struct ice_not { | |
57 | static const bool value = true; | |
58 | }; | |
59 | } | |
60 | template< typename T > struct is_member_function_pointer : ::boost::integral_constant<bool,::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value> {}; | |
61 | template< typename T > struct is_member_pointer : ::boost::integral_constant<bool,::boost::is_member_function_pointer<T>::value> {}; | |
62 | ||
63 | namespace detail { | |
64 | template< typename T > struct is_pointer_helper { | |
65 | static const bool value = false; | |
66 | }; | |
67 | template< typename T > struct is_pointer_impl { | |
68 | static const bool value = (::boost::type_traits::ice_and< ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value , ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value >::value); | |
69 | }; | |
70 | } | |
71 | template< typename T > struct is_pointer : ::boost::integral_constant<bool,::boost::detail::is_pointer_impl<T>::value> {}; | |
72 | ||
73 | struct na {}; | |
74 | ||
75 | namespace mpl { | |
76 | template< bool C , typename T1 , typename T2 > struct if_c { typedef T2 type; }; | |
77 | ||
78 | template< typename T1 = na , typename T2 = na , typename T3 = na > struct if_ { | |
79 | private: typedef if_c< static_cast<bool>(T1::value) , T2 , T3 > almost_type_; | |
80 | public: typedef typename almost_type_::type type; | |
81 | }; | |
82 | } | |
83 | ||
84 | namespace python { | |
85 | template<typename T> class is_handle { | |
86 | public: static const bool value = false; | |
87 | }; | |
88 | namespace detail { | |
89 | template<typename T> struct is_borrowed_ptr { | |
90 | static const bool value = false; | |
91 | }; | |
92 | template <class T> struct is_auto_ptr : mpl::false_ {}; | |
93 | template <class T> struct copy_ctor_mutates_rhs : is_auto_ptr<T> {}; | |
94 | } | |
95 | ||
96 | namespace converter { | |
97 | template <class T> struct rvalue_from_python_storage {}; | |
98 | template <class T> struct rvalue_from_python_data : rvalue_from_python_storage<T> { ~rvalue_from_python_data(); }; | |
99 | ||
100 | template <class> struct pyobject_traits; | |
101 | template <class T> struct handle_object_manager_traits : pyobject_traits<typename T::element_type> {}; | |
102 | template <class T> struct default_object_manager_traits { | |
103 | static const bool is_specialized = python::detail::is_borrowed_ptr<T>::value; | |
104 | }; | |
105 | ||
106 | template <class T> struct object_manager_traits : mpl::if_c< is_handle<T>::value , handle_object_manager_traits<T> , default_object_manager_traits<T> >::type {}; | |
107 | template <class T> struct is_object_manager : mpl::bool_<object_manager_traits<T>::is_specialized> {}; | |
108 | } | |
109 | ||
110 | class object; | |
111 | } | |
112 | ||
113 | namespace detail { | |
114 | template <typename T, bool isp, bool b1> struct ct_imp { typedef const T& param_type; }; | |
115 | } | |
116 | ||
117 | template <typename T> struct call_traits { | |
118 | typedef typename boost::detail::ct_imp< T, ::boost::is_pointer<T>::value, ::boost::is_arithmetic<T>::value >::param_type param_type; | |
119 | }; | |
120 | ||
121 | namespace python { | |
122 | namespace converter { | |
123 | template <class Ptr> struct extract_pointer {}; | |
124 | template <class Ref> struct extract_reference {}; | |
125 | template <class T> struct extract_rvalue { | |
126 | typedef typename mpl::if_< python::detail::copy_ctor_mutates_rhs<T> , T& , typename call_traits<T>::param_type >::type result_type; | |
127 | mutable rvalue_from_python_data<T> m_data; | |
128 | }; | |
129 | template <class T> struct extract_object_manager {}; | |
130 | template <class T> struct select_extract { | |
131 | static const bool obj_mgr = is_object_manager<T>::value; | |
132 | static const bool ptr = is_pointer<T>::value; | |
133 | static const bool ref = is_reference<T>::value; | |
134 | typedef typename mpl::if_c< obj_mgr , extract_object_manager<T> , typename mpl::if_c< ptr , extract_pointer<T> , typename mpl::if_c< ref , extract_reference<T> , extract_rvalue<T> >::type >::type >::type type; | |
135 | }; | |
136 | } | |
137 | template <class T> struct extract : converter::select_extract<T>::type { | |
138 | private: typedef typename converter::select_extract<T>::type base; | |
139 | public: typedef typename base::result_type result_type; | |
140 | operator result_type() const {} | |
141 | extract(object const&); | |
142 | }; | |
143 | } | |
144 | } | |
145 | struct QHashData { | |
146 | static QHashData shared_null; | |
147 | }; | |
148 | template <class Key, class T> class QHash { | |
149 | public: inline QHash() { } | |
150 | T &operator[](const Key &key); | |
151 | }; | |
152 | class type_details { | |
153 | typedef QGenericArgument(*func_python_to_cpp_type)(const boost::python::object&, const char*); | |
154 | public: template<typename T> static type_details* create_object_type_details(const char* type_name) {} | |
155 | ||
156 | template<typename T> static type_details* create_value_type_details(const char* type_name) { | |
157 | type_details* self = new type_details(); | |
158 | self->m_func_python_to_cpp = &python_to_value_type<T>; | |
159 | } | |
160 | func_python_to_cpp_type m_func_python_to_cpp; | |
161 | template <class T> static QGenericArgument python_to_value_type(const boost::python::object& obj, const char *type_name) { | |
162 | T* val = new T(boost::python::extract<T>(obj)); | |
163 | } | |
164 | }; | |
165 | ||
166 | class type_manager { | |
167 | public: static type_manager& instance(); | |
168 | template<typename T> void register_value_type(const char* type_name) { | |
169 | m_type_map[type_name] = type_details::create_value_type_details<T>(type_name); | |
170 | } | |
171 | QHash<QString, type_details* > m_type_map; | |
172 | }; | |
173 | class qwebpage_extensionoption_wrapper | |
174 | { | |
175 | static void define_python_class(); | |
176 | }; | |
177 | void qwebpage_extensionoption_wrapper::define_python_class() { | |
178 | type_manager::instance().register_value_type<QWebPage::ExtensionOption >("QWebPage::ExtensionOption"); | |
179 | } |