diff --git a/cmake/FindPIP.cmake b/cmake/FindPIP.cmake index ad540f9d..aec725ed 100644 --- a/cmake/FindPIP.cmake +++ b/cmake/FindPIP.cmake @@ -78,6 +78,7 @@ endif() if (NOT BUILDING_pip) shstk_find_header(pip PIP "pip_version.h" "${_PIP_LIBRARY_PATH_}") + set(PIP_INCLUDES "${pip_INCLUDES}" CACHE STRING "") endif() if(PIP_FIND_VERSION VERSION_GREATER PIP_VERSION) message(FATAL_ERROR "PIP version ${PIP_VERSION} is available, but ${PIP_FIND_VERSION} requested!") diff --git a/libs/main/containers/pideque.h b/libs/main/containers/pideque.h index e2ebe89b..ebc8a990 100644 --- a/libs/main/containers/pideque.h +++ b/libs/main/containers/pideque.h @@ -228,6 +228,7 @@ public: inline PIDeque & clear() { PIINTROSPECTION_CONTAINER_UNUSED(T, pid_size) pid_size = 0; + pid_start = (pid_rsize - pid_size) / 2; return *this; } @@ -258,6 +259,8 @@ public: if (new_size < pid_size) { deleteT(&(pid_data[new_size + pid_start]), pid_size - new_size); pid_size = new_size; + if (new_size == 0) + pid_start = (pid_rsize - pid_size) / 2; } if (new_size > pid_size) { size_t os = pid_size; @@ -291,6 +294,8 @@ public: } inline PIDeque & insert(size_t index, const T & v = T()) { + if (index == pid_size) return push_back(v); + PIINTROSPECTION_CONTAINER_USED(T, 1) bool dir = pid_rsize <= 2 ? true : (index >= pid_rsize / 2 ? true : false); if (dir) { alloc(pid_size + 1, true); @@ -303,11 +308,12 @@ public: if (index > 0) memmove((void*)(&(pid_data[pid_start])), (const void*)(&(pid_data[pid_start + 1])), index * sizeof(T)); } - PIINTROSPECTION_CONTAINER_USED(T, 1) elementNew(pid_data + pid_start + index, v); return *this; } inline PIDeque & insert(size_t index, T && v) { + if (index == pid_size) return push_back(v); + PIINTROSPECTION_CONTAINER_USED(T, 1) bool dir = pid_rsize <= 2 ? true : (index >= pid_rsize / 2 ? true : false); if (dir) { alloc(pid_size + 1, true); @@ -320,7 +326,6 @@ public: if (index > 0) memmove((void*)(&(pid_data[pid_start])), (const void*)(&(pid_data[pid_start + 1])), index * sizeof(T)); } - PIINTROSPECTION_CONTAINER_USED(T, 1) elementNew(pid_data + pid_start + index, std::move(v)); return *this; } diff --git a/main.cpp b/main.cpp index 8a103729..c83f9350 100644 --- a/main.cpp +++ b/main.cpp @@ -1,22 +1,26 @@ #include "pip.h" + + int main() { - const int iters = 10; - const int sz = 100000000; - { - piCout << "PIVector push back"; - PIVector v; - //v.reserve(sz); - for (int n=0; n v; +// //v.reserve(sz); +// for (int n=0; n v; - //v.reserve(sz); - for (int n=0; n v; - //v.reserve(sz); - for (int n=0; n v; +// //v.reserve(sz); +// for (int n=0; n v; +// //v.reserve(sz); +// for (int n=0; n ind; + for (int i=0; i v; - PIDeque v2; + piCout << "PIMap insert back"; + PIMap v; //v.reserve(sz); for (int n=0; n v; - PIDeque> v2; + piCout << "PIMap insert front"; + PIMap v; //v.reserve(sz); for (int n=0; n(i, v[i]); + for (int i=0; i v; + //v.reserve(sz); + for (int n=0; n v; +// piCout << "Multi insert"; +// PIVector v; +// PIDeque v2; // //v.reserve(sz); // for (int n=0; n v; +// piCout << "Multi insert 2"; +// PIVector v; +// PIDeque> v2; // //v.reserve(sz); // for (int n=0; n(i, v[i]); // piCout << tm.elapsed_m(); // v.clear(); +// v2.clear(); // } // } + + return 0; }