PIVector and PIDeque takeRange
This commit is contained in:
@@ -1431,12 +1431,12 @@ public:
|
||||
deleteT(piv_data + index, piv_size - index);
|
||||
piv_size = index;
|
||||
}
|
||||
return *this;
|
||||
} else {
|
||||
size_t os = piv_size - index - count;
|
||||
deleteT(piv_data + index, count);
|
||||
memmove((void*)(piv_data + index), (const void*)(piv_data + index + count), os * sizeof(T));
|
||||
piv_size -= count;
|
||||
}
|
||||
size_t os = piv_size - index - count;
|
||||
deleteT(piv_data + index, count);
|
||||
memmove((void*)(piv_data + index), (const void*)(piv_data + index + count), os * sizeof(T));
|
||||
piv_size -= count;
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -2461,6 +2461,38 @@ public:
|
||||
return ret;
|
||||
}
|
||||
|
||||
//! \~english Cut sub-array of this array.
|
||||
//! \~russian Вырезает подмассив, то есть кусок из текущего массива.
|
||||
//! \~english
|
||||
//! \param index - index of this array where sub-array starts
|
||||
//! \param count - sub-array size
|
||||
//! \~russian
|
||||
//! \param index - индекс в текущем массиве, откуда начинётся подмассив
|
||||
//! \param count - размер подмассива
|
||||
//! \~\details
|
||||
//! \~english
|
||||
//! Index must be in range from `0` to `size()-1`.
|
||||
//! If sub-array size more than this array size, than ends early.
|
||||
//! \~russian
|
||||
//! Индекс начала должен лежать в диапазоне от `0` до `size()-1`.
|
||||
//! Если заданный размер подмассива превышает размер текущего массива,
|
||||
//! то вернется подмассив меньшего размера (`size()-index-1`).
|
||||
inline PIVector<T> takeRange(size_t index, size_t count) {
|
||||
PIVector<T> ret;
|
||||
if (index >= piv_size || count == 0) return ret;
|
||||
if (index + count > piv_size) count = piv_size - index;
|
||||
ret.alloc(count);
|
||||
memcpy((void*)ret.piv_data, (const void*)(piv_data + index), count * sizeof(T));
|
||||
size_t os = piv_size - index - count;
|
||||
if (os > 0) {
|
||||
memmove((void*)(piv_data + index), (const void*)(piv_data + index + count), os * sizeof(T));
|
||||
piv_size -= count;
|
||||
} else {
|
||||
piv_size = index;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
private:
|
||||
inline void _reset() {
|
||||
piv_size = 0;
|
||||
|
||||
Reference in New Issue
Block a user