From b82efa32e771f653c5e49165b0659c67e2db3438 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 27 Dec 2018 14:27:59 +0000 Subject: [PATCH] epee: speed up json parsing --- .../epee/include/storages/portable_storage_base.h | 15 ++++++++++++--- .../include/storages/portable_storage_from_bin.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/contrib/epee/include/storages/portable_storage_base.h b/contrib/epee/include/storages/portable_storage_base.h index 93132548b..da84fd8ea 100644 --- a/contrib/epee/include/storages/portable_storage_base.h +++ b/contrib/epee/include/storages/portable_storage_base.h @@ -31,7 +31,8 @@ #include #include #include -#include +#include +#include #define PORTABLE_STORAGE_SIGNATUREA 0x01011101 #define PORTABLE_STORAGE_SIGNATUREB 0x01020101 // bender's nightmare @@ -71,6 +72,9 @@ namespace epee { struct section; + template struct entry_container { typedef std::vector type; static void reserve(type &t, size_t n) { t.reserve(n); } }; + template<> struct entry_container { typedef std::deque type; static void reserve(type &t, size_t n) {} }; + /************************************************************************/ /* */ /************************************************************************/ @@ -119,8 +123,13 @@ namespace epee return m_array.back(); } - std::list m_array; - mutable typename std::list::const_iterator m_it; + void reserve(size_t n) + { + entry_container::reserve(m_array, n); + } + + typename entry_container::type m_array; + mutable typename entry_container::type::const_iterator m_it; }; diff --git a/contrib/epee/include/storages/portable_storage_from_bin.h b/contrib/epee/include/storages/portable_storage_from_bin.h index f9cc22d27..2884f8c5e 100644 --- a/contrib/epee/include/storages/portable_storage_from_bin.h +++ b/contrib/epee/include/storages/portable_storage_from_bin.h @@ -136,6 +136,7 @@ namespace epee //for pod types array_entry_t sa; size_t size = read_varint(); + sa.reserve(size); //TODO: add some optimization here later while(size--) sa.m_array.push_back(read());