do not move-on-return in order to allow copy elision

master
Daniel Kolesa 2015-06-25 18:59:26 +01:00
parent 501beee633
commit 3a1ea741f1
2 changed files with 18 additions and 18 deletions

View File

@ -319,7 +319,7 @@ public:
RangeHalf operator++(int) { RangeHalf operator++(int) {
RangeHalf tmp(*this); RangeHalf tmp(*this);
next(); next();
return octa::move(tmp); return tmp;
} }
RangeHalf &operator--() { RangeHalf &operator--() {
@ -329,18 +329,18 @@ public:
RangeHalf operator--(int) { RangeHalf operator--(int) {
RangeHalf tmp(*this); RangeHalf tmp(*this);
prev(); prev();
return octa::move(tmp); return tmp;
} }
RangeHalf operator+(RangeDifference<T> n) const { RangeHalf operator+(RangeDifference<T> n) const {
RangeHalf tmp(*this); RangeHalf tmp(*this);
tmp.add_n(n); tmp.add_n(n);
return octa::move(tmp); return tmp;
} }
RangeHalf operator-(RangeDifference<T> n) const { RangeHalf operator-(RangeDifference<T> n) const {
RangeHalf tmp(*this); RangeHalf tmp(*this);
tmp.sub_n(n); tmp.sub_n(n);
return octa::move(tmp); return tmp;
} }
RangeHalf &operator+=(RangeDifference<T> n) { RangeHalf &operator+=(RangeDifference<T> n) {

View File

@ -360,28 +360,28 @@ template<typename T, typename F>
String concat(const T &v, const String &sep, F func) { String concat(const T &v, const String &sep, F func) {
String ret; String ret;
auto range = octa::each(v); auto range = octa::each(v);
if (range.empty()) return octa::move(ret); if (range.empty()) return ret;
for (;;) { for (;;) {
ret += func(range.front()); ret += func(range.front());
range.pop_front(); range.pop_front();
if (range.empty()) break; if (range.empty()) break;
ret += sep; ret += sep;
} }
return octa::move(ret); return ret;
} }
template<typename T> template<typename T>
String concat(const T &v, const String &sep = " ") { String concat(const T &v, const String &sep = " ") {
String ret; String ret;
auto range = octa::each(v); auto range = octa::each(v);
if (range.empty()) return octa::move(ret); if (range.empty()) return ret;
for (;;) { for (;;) {
ret += range.front(); ret += range.front();
range.pop_front(); range.pop_front();
if (range.empty()) break; if (range.empty()) break;
ret += sep; ret += sep;
} }
return octa::move(ret); return ret;
} }
template<typename T, typename F> template<typename T, typename F>
@ -425,7 +425,7 @@ template<typename T> struct ToString {
decltype(octa::each(v)) decltype(octa::each(v))
>>()); >>());
ret += "}"; ret += "}";
return octa::move(ret); return ret;
} }
template<typename U> template<typename U>
@ -437,9 +437,9 @@ template<typename T> struct ToString {
} }
String operator()(const T &v) const { String operator()(const T &v) const {
return octa::move(to_str<octa::RemoveCv< return to_str<octa::RemoveCv<
octa::RemoveReference<T> octa::RemoveReference<T>
>>(v)); >>(v);
} }
}; };
@ -476,7 +476,7 @@ template<> struct ToString<char> {
String operator()(char c) { String operator()(char c) {
String ret; String ret;
ret.push(c); ret.push(c);
return octa::move(ret); return ret;
} }
}; };
@ -487,7 +487,7 @@ template<> struct ToString<T> { \
String operator()(T v) { \ String operator()(T v) { \
String ret; \ String ret; \
octa::detail::str_printf((octa::Vector<char> *)&ret, fmt, v); \ octa::detail::str_printf((octa::Vector<char> *)&ret, fmt, v); \
return octa::move(ret); \ return ret; \
} \ } \
}; };
@ -511,7 +511,7 @@ template<typename T> struct ToString<T *> {
String operator()(Argument v) { String operator()(Argument v) {
String ret; String ret;
octa::detail::str_printf((octa::Vector<char> *)&ret, "%p", v); octa::detail::str_printf((octa::Vector<char> *)&ret, "%p", v);
return octa::move(ret); return ret;
} }
}; };
@ -542,19 +542,19 @@ template<typename T, typename U> struct ToString<octa::Pair<T, U>> {
ret += ToString<octa::RemoveCv<octa::RemoveReference<U>>>() ret += ToString<octa::RemoveCv<octa::RemoveReference<U>>>()
(v.second); (v.second);
ret += "}"; ret += "}";
return octa::move(ret); return ret;
} }
}; };
template<typename T> template<typename T>
String to_string(const T &v) { String to_string(const T &v) {
return octa::move(ToString<octa::RemoveCv<octa::RemoveReference<T>>> return ToString<octa::RemoveCv<octa::RemoveReference<T>>>
()(v)); ()(v);
} }
template<typename T> template<typename T>
String to_string(std::initializer_list<T> init) { String to_string(std::initializer_list<T> init) {
return octa::move(ToString<std::initializer_list<T>>()(init)); return ToString<std::initializer_list<T>>()(init);
} }
} /* namespace octa */ } /* namespace octa */