take out "asize" from vector/dequeue to picontainers.h->calcNewSize()
minAlloc and maxPoTAlloc now can be override from CMake by PIP_CONTAINERS_MIN_ALLOC and PIP_CONTAINERS_MAX_POT_ALLOC variables
This commit is contained in:
@@ -2459,26 +2459,6 @@ private:
|
||||
piv_data = nullptr;
|
||||
}
|
||||
|
||||
inline size_t asize(size_t s) {
|
||||
if (s == 0) return 0;
|
||||
if (s < _PIContainerConstants<T>::maxCountForPoT()) {
|
||||
if (piv_rsize * 2 >= s && piv_rsize < s) {
|
||||
return piv_rsize * 2;
|
||||
}
|
||||
ssize_t t = _PIContainerConstants<T>::minCountPoT();
|
||||
s -= 1;
|
||||
while (s >> t)
|
||||
++t;
|
||||
return (1 << t);
|
||||
} else {
|
||||
size_t ret = piv_rsize;
|
||||
while (ret < s)
|
||||
ret += _PIContainerConstants<T>::stepAfterPoT();
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<typename T1 = T, typename std::enable_if<!std::is_trivially_copyable<T1>::value, int>::type = 0>
|
||||
inline void newT(T * dst, const T * src, size_t s) {
|
||||
PIINTROSPECTION_CONTAINER_USED(T, s)
|
||||
@@ -2566,19 +2546,19 @@ private:
|
||||
piv_size = new_size;
|
||||
return;
|
||||
}
|
||||
piv_size = new_size;
|
||||
const size_t as = asize(new_size);
|
||||
if (as == piv_rsize) return;
|
||||
piv_size = new_size;
|
||||
const size_t new_rsize = _PIContainerConstants<T>::calcNewSize(piv_rsize, new_size);
|
||||
if (new_rsize == piv_rsize) return;
|
||||
PIINTROSPECTION_CONTAINER_ALLOC(T, (as - piv_rsize))
|
||||
T * p_d = reinterpret_cast<T *>(realloc(reinterpret_cast<void *>(piv_data), as * sizeof(T)));
|
||||
T * new_data = reinterpret_cast<T *>(realloc(reinterpret_cast<void *>(piv_data), new_rsize * sizeof(T)));
|
||||
#ifndef NDEBUG
|
||||
if (!p_d) {
|
||||
if (!new_data) {
|
||||
fprintf(stderr, "error with PIVector<%s>::alloc\n", __PIP_TYPENAME__(T));
|
||||
}
|
||||
#endif
|
||||
assert(p_d);
|
||||
piv_data = p_d;
|
||||
piv_rsize = as;
|
||||
piv_data = new_data;
|
||||
piv_rsize = new_rsize;
|
||||
}
|
||||
|
||||
T * piv_data = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user