forked from OctaForge/libostd
do not move-on-return in order to allow copy elision
parent
501beee633
commit
3a1ea741f1
|
@ -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) {
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in New Issue