22 #ifndef BOOST_PYTHON_INDEXING_ELEMENT_PROXY_HPP 23 #define BOOST_PYTHON_INDEXING_ELEMENT_PROXY_HPP 25 #include <indexing_suite/shared_proxy_impl.hpp> 26 #include <boost/shared_ptr.hpp> 27 #include <boost/get_pointer.hpp> 28 #include <boost/utility/addressof.hpp> 29 #include <boost/detail/workaround.hpp> 31 namespace boost {
namespace python {
namespace indexing {
32 template<
typename ContainerProxy>
36 typedef typename ContainerProxy::shared_proxy proxy_type;
37 typedef typename ContainerProxy::raw_value_type raw_value_type;
38 typedef typename ContainerProxy::size_type size_type;
39 typedef boost::shared_ptr<proxy_type> proxy_pointer;
41 typedef typename proxy_type::value_type value_type;
42 typedef typename proxy_type::reference reference;
43 typedef typename proxy_type::pointer pointer;
44 typedef typename proxy_type::iterator_category iterator_category;
45 typedef typename proxy_type::difference_type difference_type;
47 typedef value_type element_type;
51 explicit element_proxy (proxy_pointer
const &ptr) : m_ptr (ptr) { }
54 : m_ptr (
new proxy_type(val))
59 reference operator* ()
const {
return m_ptr->operator*(); }
60 pointer operator-> ()
const {
return (*m_ptr).operator->(); }
61 pointer
get ()
const {
return operator->(); }
64 operator reference ()
const {
return operator*(); }
66 #if BOOST_WORKAROUND (BOOST_MSVC, <= 1200) 69 bool operator== (value_type
const &val)
const {
return (**
this) == val; }
70 bool operator!= (value_type
const &val)
const {
return (**
this) != val; }
71 bool operator< (value_type
const &val)
const {
return (**
this) < val; }
72 bool operator> (value_type
const &val)
const {
return (**
this) > val; }
77 proxy_type &proxy = *m_ptr;
78 ContainerProxy *container = proxy.owner();
79 size_type index = proxy.index();
83 container->replace (index, copy);
87 m_ptr = container->at (index).m_ptr;
107 return (*
this) = *copy;
110 size_t use_count()
const {
return m_ptr.use_count(); }
116 template<
typename ContainerProxy>
121 typedef typename base_type::proxy_type proxy_type;
122 typedef typename base_type::proxy_pointer proxy_pointer;
123 typedef typename base_type::raw_value_type raw_value_type;
125 typedef typename proxy_type::value_type
const value_type;
126 typedef value_type &reference;
127 typedef value_type *pointer;
128 typedef typename base_type::iterator_category iterator_category;
129 typedef typename base_type::difference_type difference_type;
137 : m_base (copy.m_base)
147 : m_base (
new proxy_type(val))
151 reference operator* ()
const {
return *m_base; }
152 pointer operator-> ()
const {
return m_base.operator->(); }
155 operator reference ()
const {
return *m_base; }
157 #if BOOST_WORKAROUND (BOOST_MSVC, <= 1200) 160 bool operator== (value_type
const &val)
const {
return m_base == val; }
161 bool operator!= (value_type
const &val)
const {
return m_base != val; }
162 bool operator< (value_type
const &val)
const {
return m_base < val; }
163 bool operator> (value_type
const &val)
const {
return m_base > val; }
166 size_t use_count()
const {
return m_base.use_count(); }
172 #ifdef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP 176 template<
typename ContainerProxy>
177 typename ContainerProxy::raw_value_type *
180 return ::boost::addressof (*proxy);
183 #ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP 185 using boost::get_pointer;
190 #endif // BOOST_PYTHON_INDEXING_ELEMENT_PROXY_HPP Definition: python_CEGUI.h:11
Definition: element_proxy.hpp:33
Definition: element_proxy.hpp:117