From 5963104ea5036cd5a6f6058cdf50dfb5eda9c55a Mon Sep 17 00:00:00 2001 From: Matias Romeo Date: Wed, 26 Jul 2017 05:01:27 -0300 Subject: [PATCH] Implement load_secondary_i128i128 --- .../eos/chain/message_handling_contexts.hpp | 2 ++ libraries/chain/message_handling_contexts.cpp | 26 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/libraries/chain/include/eos/chain/message_handling_contexts.hpp b/libraries/chain/include/eos/chain/message_handling_contexts.hpp index 1cd51206d..74c59ff3f 100644 --- a/libraries/chain/include/eos/chain/message_handling_contexts.hpp +++ b/libraries/chain/include/eos/chain/message_handling_contexts.hpp @@ -52,6 +52,8 @@ public: uint128_t* primary, uint128_t* secondary, char* data, uint32_t maxlen ); int32_t load_primary_i128i128( Name scope, Name code, Name table, uint128_t* primary, uint128_t* secondary, char* data, uint32_t maxlen ); + int32_t load_secondary_i128i128( Name scope, Name code, Name table, + uint128_t* primary, uint128_t* secondary, char* data, uint32_t maxlen ); int32_t lowerbound_primary_i128i128( Name scope, Name code, Name table, uint128_t* primary, uint128_t* secondary, char* data, uint32_t maxlen ); int32_t lowerbound_secondary_i128i128( Name scope, Name code, Name table, diff --git a/libraries/chain/message_handling_contexts.cpp b/libraries/chain/message_handling_contexts.cpp index d3a451ebf..11c64cb6d 100644 --- a/libraries/chain/message_handling_contexts.cpp +++ b/libraries/chain/message_handling_contexts.cpp @@ -229,6 +229,32 @@ int32_t message_validate_context::load_primary_i128i128( Name scope, Name code, } return copylen; } + +int32_t message_validate_context::load_secondary_i128i128( Name scope, Name code, Name table, + uint128_t* primary, uint128_t* secondary, char* value, uint32_t valuelen ) { + + require_scope( scope ); + const auto& idx = db.get_index(); + auto itr = idx.lower_bound( boost::make_tuple( uint64_t(scope), + uint64_t(code), + uint64_t(table), + *secondary, uint128_t(0) ) ); + + if( itr == idx.end() || + itr->scope != (scope) || + itr->code != (code) || + itr->table != (table) || + itr->secondary_key != *secondary ) return -1; + + *primary = itr->primary_key; + + auto copylen = std::min(itr->value.size(),valuelen); + if( copylen ) { + itr->value.copy(value, copylen); + } + return copylen; +} + int32_t message_validate_context::lowerbound_primary_i128i128( Name scope, Name code, Name table, uint128_t* primary, uint128_t* secondary, char* value, uint32_t valuelen ) { -- GitLab