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
85 typename Accessor::result_type
106 template<
typename Container>
108 Container, pass_through> {
141 template<
typename Container,
typename Accessor>
146 template<
typename Container,
typename Accessor>
148 Container, Accessor>::operator[](
const key_type& key)
const {
149 typename Container::const_iterator it;
150 if ((it = base_type::container.find(key)) == base_type::container.end()) {
151 throw no_such_key(type_string(
"no such key in container: `%1%'",
152 "no such key in container", key));
155 return this->accessor(it->second);
158 template<
typename Container,
typename Accessor>
161 typename Container::iterator it;
162 if ((it = base_type::container.find(key)) == base_type::container.end()) {
163 throw no_such_key(type_string(
"no such key in container: `%1%'",
164 "no such key in container", key));
167 return this->accessor(it->second);
172 template<
typename Container>
174 Container& 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>
206 return base_type::container.find(key);
209 template<
typename Container>
212 return base::container.find(key);