forked from OctaForge/libostd
range fixes
This commit is contained in:
parent
9de9d99d4d
commit
a31ddba522
|
@ -477,12 +477,13 @@ template<typename B, typename C, typename V, typename R = V &,
|
||||||
return (on - n);
|
return (on - n);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename OR, typename = EnableIf<IsOutputRange<OR>>>
|
template<typename OR>
|
||||||
Size copy(OR &&orange, Size n = -1) {
|
EnableIf<IsOutputRange<OR>, Size> copy(OR &&orange, Size n = -1) {
|
||||||
B r(*((B *)this));
|
B r(*((B *)this));
|
||||||
Size on = n;
|
Size on = n;
|
||||||
for (; n && !r.empty(); --n) {
|
for (; n && !r.empty(); --n) {
|
||||||
orange.put(r.front());
|
if (!orange.put(r.front()))
|
||||||
|
break;
|
||||||
r.pop_front();
|
r.pop_front();
|
||||||
}
|
}
|
||||||
return (on - n);
|
return (on - n);
|
||||||
|
@ -984,8 +985,8 @@ public:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename R, typename = EnableIf<IsOutputRange<R>>>
|
template<typename R>
|
||||||
Size copy(R &&orange, Size n = -1) {
|
EnableIf<IsOutputRange<R>, Size> copy(R &&orange, Size n = -1) {
|
||||||
Size c = size();
|
Size c = size();
|
||||||
if (n < c) c = n;
|
if (n < c) c = n;
|
||||||
return orange.put_n(p_beg, c);
|
return orange.put_n(p_beg, c);
|
||||||
|
@ -994,6 +995,10 @@ public:
|
||||||
Size copy(RemoveCv<T> *p, Size n = -1) {
|
Size copy(RemoveCv<T> *p, Size n = -1) {
|
||||||
Size c = size();
|
Size c = size();
|
||||||
if (n < c) c = n;
|
if (n < c) c = n;
|
||||||
|
if (IsPod<T>) {
|
||||||
|
memcpy(p_beg, data(), c * sizeof(T));
|
||||||
|
return c;
|
||||||
|
}
|
||||||
return copy(PointerRange(p, c), c);
|
return copy(PointerRange(p, c), c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -145,6 +145,13 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Size put_n(const T *p, Size n) {
|
||||||
|
Size an = ostd::min(n, size());
|
||||||
|
memcpy(p_beg, p, an * sizeof(T));
|
||||||
|
p_beg += an;
|
||||||
|
return an;
|
||||||
|
}
|
||||||
|
|
||||||
T *data() { return p_beg; }
|
T *data() { return p_beg; }
|
||||||
const T *data() const { return p_beg; }
|
const T *data() const { return p_beg; }
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue