123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #ifndef BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
- #define BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
- #include <type_traits>
- #include <boost/range/size_type.hpp>
- #include <boost/range/value_type.hpp>
- namespace boost { namespace geometry
- {
- namespace traits
- {
- template <typename Range>
- struct rvalue_type
- {
- typedef typename std::remove_reference<Range>::type& type;
- };
- template <typename Range>
- struct clear
- {
- static inline void apply(typename rvalue_type<Range>::type range)
- {
- range.clear();
- }
- };
- template <typename Range>
- struct push_back
- {
- typedef typename boost::range_value
- <
- typename std::remove_reference<Range>::type
- >::type item_type;
- static inline void apply(typename rvalue_type<Range>::type range,
- item_type const& item)
- {
- range.push_back(item);
- }
- static inline void apply(typename rvalue_type<Range>::type range,
- item_type && item)
- {
- range.push_back(std::move(item));
- }
- };
- template <typename Range>
- struct emplace_back
- {
-
-
-
- template <typename ...Args>
- static inline void apply(typename rvalue_type<Range>::type range,
- Args&&... args)
- {
- range.emplace_back(std::forward<Args>(args)...);
- }
- };
- template <typename Range>
- struct resize
- {
- using size_type = typename boost::range_size
- <
- typename std::remove_reference<Range>::type
- >::type;
- static inline void apply(typename rvalue_type<Range>::type range,
- size_type new_size)
- {
- range.resize(new_size);
- }
- };
- }
- }}
- #endif
|