forked from OctaForge/libostd
stl-like initializer list interface (allow octastd to be used with stl outside of octaforge)
parent
1371a32db7
commit
08bb790612
|
@ -185,21 +185,21 @@ namespace octa {
|
|||
|
||||
template<typename T>
|
||||
inline T min(InitializerList<T> il) {
|
||||
return min_element(il.each()).first();
|
||||
return min_element(each(il)).first();
|
||||
}
|
||||
template<typename T, typename C>
|
||||
inline T min(InitializerList<T> il, C compare) {
|
||||
return min_element(il.each(), compare).first();
|
||||
return min_element(each(il), compare).first();
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
inline T max(InitializerList<T> il) {
|
||||
return max_element(il.each()).first();
|
||||
return max_element(each(il)).first();
|
||||
}
|
||||
|
||||
template<typename T, typename C>
|
||||
inline T max(InitializerList<T> il, C compare) {
|
||||
return max_element(il.each(), compare).first();
|
||||
return max_element(each(il), compare).first();
|
||||
}
|
||||
|
||||
/* clamp */
|
||||
|
|
|
@ -33,11 +33,8 @@ namespace std {
|
|||
|
||||
size_t size() const { return p_len; }
|
||||
|
||||
const T *data() const { return p_buf; }
|
||||
|
||||
octa::PointerRange<const T> each() {
|
||||
return octa::PointerRange<const T>(p_buf, p_len);
|
||||
}
|
||||
const T *begin() const { return p_buf; }
|
||||
const T *end() const { return p_buf + p_len; }
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -45,8 +42,8 @@ namespace octa {
|
|||
template<typename T> using InitializerList = std::initializer_list<T>;
|
||||
|
||||
template<typename T>
|
||||
auto each(InitializerList<T> init) -> decltype(init.each()) {
|
||||
return init.each();
|
||||
PointerRange<const T> each(InitializerList<T> init) {
|
||||
return PointerRange<const T>(init.begin(), init.end());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -88,8 +88,8 @@ namespace octa {
|
|||
}
|
||||
|
||||
Vector(InitializerList<T> v): Vector() {
|
||||
size_t len = v.size();
|
||||
const T *ptr = v.data();
|
||||
size_t len = v.end() - v.begin();
|
||||
const T *ptr = v.begin();
|
||||
reserve(len);
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
new (&p_buf[i]) T(ptr[i]);
|
||||
|
@ -143,12 +143,12 @@ namespace octa {
|
|||
|
||||
Vector<T> &operator=(InitializerList<T> il) {
|
||||
clear();
|
||||
size_t ilen = il.size();
|
||||
size_t ilen = il.end() - il.begin();
|
||||
reserve(ilen);
|
||||
if (octa::IsPod<T>()) {
|
||||
memcpy(p_buf, il.data(), ilen);
|
||||
memcpy(p_buf, il.begin(), ilen);
|
||||
} else {
|
||||
T *buf = p_buf, *ibuf = il.data(), *last = il.data() + ilen;
|
||||
T *buf = p_buf, *ibuf = il.begin(), *last = il.end();
|
||||
while (ibuf != last) {
|
||||
new (buf++) T(*ibuf++);
|
||||
}
|
||||
|
@ -295,7 +295,7 @@ namespace octa {
|
|||
}
|
||||
|
||||
T *insert(size_t idx, InitializerList<T> il) {
|
||||
return insert_range(idx, il.each());
|
||||
return insert_range(idx, octa::each(il));
|
||||
}
|
||||
|
||||
RangeType each() {
|
||||
|
|
Loading…
Reference in New Issue