File indexing completed on 2025-01-18 09:35:23
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
0020 #define BOOST_GEOMETRY_CORE_MUTABLE_RANGE_HPP
0021
0022
0023 #include <type_traits>
0024
0025 #include <boost/range/size_type.hpp>
0026 #include <boost/range/value_type.hpp>
0027
0028
0029 namespace boost { namespace geometry
0030 {
0031
0032
0033 namespace traits
0034 {
0035
0036
0037
0038
0039
0040
0041 template <typename Range>
0042 struct rvalue_type
0043 {
0044 typedef typename std::remove_reference<Range>::type& type;
0045 };
0046
0047
0048
0049
0050
0051
0052 template <typename Range>
0053 struct clear
0054 {
0055 static inline void apply(typename rvalue_type<Range>::type range)
0056 {
0057 range.clear();
0058 }
0059 };
0060
0061
0062
0063
0064
0065
0066 template <typename Range>
0067 struct push_back
0068 {
0069 typedef typename boost::range_value
0070 <
0071 typename std::remove_reference<Range>::type
0072 >::type item_type;
0073
0074 static inline void apply(typename rvalue_type<Range>::type range,
0075 item_type const& item)
0076 {
0077 range.push_back(item);
0078 }
0079
0080 static inline void apply(typename rvalue_type<Range>::type range,
0081 item_type && item)
0082 {
0083 range.push_back(std::move(item));
0084 }
0085 };
0086
0087
0088
0089
0090
0091
0092 template <typename Range>
0093 struct emplace_back
0094 {
0095
0096
0097
0098 template <typename ...Args>
0099 static inline void apply(typename rvalue_type<Range>::type range,
0100 Args&&... args)
0101 {
0102 range.emplace_back(std::forward<Args>(args)...);
0103 }
0104 };
0105
0106
0107
0108
0109
0110
0111 template <typename Range>
0112 struct resize
0113 {
0114 using size_type = typename boost::range_size
0115 <
0116 typename std::remove_reference<Range>::type
0117 >::type;
0118
0119 static inline void apply(typename rvalue_type<Range>::type range,
0120 size_type new_size)
0121 {
0122 range.resize(new_size);
0123 }
0124 };
0125
0126
0127 }
0128
0129
0130 }}
0131
0132
0133 #endif