From ed7eefec673eba7a7393c3d469627f7bc0b067d2 Mon Sep 17 00:00:00 2001 From: Peter Conrad Date: Tue, 11 Jun 2019 08:52:44 +0200 Subject: [PATCH] Avoid array copy --- include/fc/variant.hpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/fc/variant.hpp b/include/fc/variant.hpp index 279b7de..2098a70 100644 --- a/include/fc/variant.hpp +++ b/include/fc/variant.hpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -663,14 +664,14 @@ namespace fc template void to_variant( const std::array& bi, variant& v, uint32_t max_depth = 1 ) { - to_variant( std::vector( bi.begin(), bi.end() ), v, 1 ); + v = variant( to_hex( bi.data(), N ) ); } template void from_variant( const variant& v, std::array& bi, uint32_t max_depth = 1 ) { - std::vector ve = v.as< std::vector >( 1 ); + std::string ve = v.as_string(); if( ve.size() ) - memcpy( bi.data(), ve.data(), std::min( ve.size(), bi.size() ) ); + from_hex( ve, bi.data(), std::min( ve.size() / 2, bi.size() ) ); else memset( bi.data(), 0, bi.size() ); } @@ -678,14 +679,14 @@ namespace fc template void to_variant( const std::array& bi, variant& v, uint32_t max_depth = 1 ) { - to_variant( std::vector( bi.begin(), bi.end() ), v, 1 ); + v = variant( to_hex( (char*) bi.data(), N ) ); } template void from_variant( const variant& v, std::array& bi, uint32_t max_depth = 1 ) { - std::vector ve = v.as< std::vector >( 1 ); + std::string ve = v.as_string(); if( ve.size() ) - memcpy( bi.data(), ve.data(), std::min( ve.size(), bi.size() ) ); + from_hex( ve, (char*)bi.data(), std::min( ve.size() / 2, bi.size() ) ); else memset( bi.data(), 0, bi.size() ); }