多索引表 iterator迭代器
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多索引表 iterator迭代器相关的知识,希望对你有一定的参考价值。
multi_index_example.hpp
#include <eosio/eosio.hpp>
using namespace eosio;
// multi index example contract class
class [[eosio::contract]] multi_index_example : public contract {
public:
using contract::contract;
// contract class constructor
multi_index_example( name receiver, name code, datastream<const char*> ds ) :
// contract base class contructor
contract(receiver, code, ds),
// instantiate multi index instance as data member (find it defined below)
testtab(receiver, receiver.value)
{ }
// the row structure of the multi index table, that is, each row of the table
// will contain an instance of this type of structure
struct [[eosio::table]] test_table {
// this field stores a name for each row of the multi index table
name test_primary;
// additional data stored in table row
uint64_t datum;
// mandatory definition for primary key getter
uint64_t primary_key( ) const { return test_primary.value; }
};
// the multi index type definition, for ease of use define a type alias `test_tables`,
// based on the multi_index template type, parametarized with a random name and
// the test_table data structure
typedef eosio::multi_index<"testtaba"_n, test_table> test_tables;
// the multi index table instance declared as a data member of type test_tables
test_tables testtab;
[[eosio::action]] void set( name user );
[[eosio::action]] void print( name user );
using set_action = action_wrapper<"set"_n, &multi_index_example::set>;
using print_action = action_wrapper<"print"_n, &multi_index_example::print>;
};
multi_index_example.cpp
#include <multi_index_example.hpp>
[[eosio::action]] void multi_index_example::set( name user ) {
// check if the user already exists
auto itr = testtab.find(user.value);
if ( itr == testtab.end() ) {
// user is not found in table, use emplace to insert a new row data structure in table
testtab.emplace( _self, [&]( auto& u ) {
u.test_primary = user;
u.secondary = "second"_n;
u.datum = 0;
});
}
}
[[eosio::action]] void multi_index_example::print( name user ) {
// searches for the row that corresponds to the user parameter
auto itr = testtab.find(user.value);
// asserts if the row was found for user parameter, if fails use the given message
check( itr != testtab.end(), "user does not exist in table" );
_itr = testtab.begin();
while (_itr != testtab.end())
{
// prints the test_primary and datum fields stored for user parameter
eosio::print_f("Test Table : {%, %}\\n", _itr->test_primary, _itr->datum);
}
}
以上是关于多索引表 iterator迭代器的主要内容,如果未能解决你的问题,请参考以下文章