From b214db29e29ca42c12ec93fb793a9575377e9784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D0=BB=D0=B8=D0=BF=D0=B5=D0=BD=D0=BA=D0=BE=20?= =?UTF-8?q?=D0=98=D0=B2=D0=B0=D0=BD?= Date: Sun, 1 Mar 2020 13:02:55 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@891 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- src_main/containers/pideque.h | 21 +++++++++++++++++++++ src_main/containers/pivector.h | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src_main/containers/pideque.h b/src_main/containers/pideque.h index b07a93eb..32952657 100755 --- a/src_main/containers/pideque.h +++ b/src_main/containers/pideque.h @@ -369,6 +369,27 @@ public: return ret; } +#ifdef PIP_CXX11_SUPPORT + PIDeque forEach(std::function f) const { + PIDeque ret; ret.reserve(pid_size); + for (uint i = 0; i < pid_size; ++i) + ret << f(pid_data[i + pid_start]); + return ret; + } + PIDeque & forEachInplace(std::function f) { + for (uint i = 0; i < pid_size; ++i) + pid_data[i + pid_start] = f(pid_data[i + pid_start]); + return *this; + } + template + PIDeque toType(std::function f) const { + PIDeque ret; ret.reserve(pid_size); + for (uint i = 0; i < pid_size; ++i) + ret << f(pid_data[i + pid_start]); + return ret; + } +#endif + private: inline void _reset() {pid_size = pid_rsize = pid_start = 0; pid_data = 0;} inline size_t asize(ssize_t s) { diff --git a/src_main/containers/pivector.h b/src_main/containers/pivector.h index 90584512..b7b7d0cd 100755 --- a/src_main/containers/pivector.h +++ b/src_main/containers/pivector.h @@ -361,6 +361,27 @@ public: return ret; } +#ifdef PIP_CXX11_SUPPORT + PIVector forEach(std::function f) const { + PIVector ret; ret.reserve(piv_size); + for (uint i = 0; i < piv_size; ++i) + ret << f(piv_data[i]); + return ret; + } + PIVector & forEachInplace(std::function f) { + for (uint i = 0; i < piv_size; ++i) + piv_data[i] = f(piv_data[i]); + return *this; + } + template + PIVector toType(std::function f) const { + PIVector ret; ret.reserve(piv_size); + for (uint i = 0; i < piv_size; ++i) + ret << f(piv_data[i]); + return ret; + } +#endif + private: inline void _reset() {piv_size = piv_rsize = 0; piv_data = 0;} inline size_t asize(size_t s) {