29 #include <boost/type_traits/remove_reference.hpp> 30 #include <boost/noncopyable.hpp> 32 #include "../runtime/TypeStringTools.h" 44 template<
typename Key,
typename Mapped,
typename Accessor>
49 return make_pair<Key, typename Accessor::result_type> (
pair.
first,
61 template<
typename Container,
typename Accessor = pass_through>
63 detail::pair_adapter<typename Container::key_type,
64 typename Container::mapped_type, Accessor> > {
67 typedef typename boost::remove_reference<typename Accessor::result_type>::type
80 operator[](
const key_type& key)
const;
85 typename Accessor::result_type
86 operator[](
const key_type& key);
89 find(
const key_type& key)
const throw () {
95 find(
const key_type& key)
throw () {
106 template<
typename Container>
108 Container, pass_through> {
122 operator[](
const key_type& key)
const;
128 operator[](
const key_type& key);
131 find(
const key_type& key)
const throw ();
134 find(
const key_type& key)
throw ();
141 template<
typename Container,
typename Accessor>
143 base_type(container) {
146 template<
typename Container,
typename Accessor>
148 Container, Accessor>::operator[](
const key_type& key)
const {
149 typename Container::const_iterator it;
151 throw no_such_key(type_string(
"no such key in container: `%1%'",
152 "no such key in container", key));
158 template<
typename Container,
typename Accessor>
160 const key_type& key) {
161 typename Container::iterator it;
163 throw no_such_key(type_string(
"no such key in container: `%1%'",
164 "no such key in container", key));
172 template<
typename Container>
178 template<
typename Container>
182 typename Container::const_iterator it;
184 throw no_such_key(type_string(
"no such key in container: `%1%'",
185 "no such key in container", key));
191 template<
typename Container>
194 typename Container::iterator it;
196 throw no_such_key(type_string(
"no such key in container: `%1%'",
197 "no such key in container", key));
203 template<
typename Container>
209 template<
typename Container>
212 return base::container.find(key);
detail::pair< Key, typename Accessor::result_type > result_type
ContainerProxy< Container, pass_through > base_type
container_type & container
base_type::const_iterator find(const key_type &key) const
boost::transform_iterator< Accessor, typename Container::iterator, typename Accessor::result_type > iterator
Container::key_type key_type
detail::force_const< typename Accessor::result_type >::type operator[](const key_type &key) const
boost::mpl::if_< typename boost::is_reference< T >::type, typename boost::add_reference< typename boost::add_const< typename boost::remove_reference< T >::type >::type >::type, typename boost::add_const< T >::type >::type type
_T2 second
second is a copy of the second object
detail::pair_adapter< typename Container::key_type, typename Container::mapped_type, Accessor > base_accessor_type
_T1 first
first is a copy of the first object
pass_through base_accessor_type
const_iterator end() const
boost::remove_reference< typename Accessor::result_type >::type mapped_type
ContainerProxy< Container, pass_through > base
boost::transform_iterator< Accessor, typename Container::const_iterator, typename detail::force_const< typename Accessor::result_type >::type > const_iterator
Container::key_type key_type
result_type operator()(const std::pair< Key, Mapped > &pair) const
ContainerProxy< Container, base_accessor_type > base_type
Container::mapped_type mapped_type
pair holds two objects of arbitrary type.
AssociativeProxy(Container &container)
base_type::iterator find(const key_type &key)