日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多索引表 (4)multi_index.hpp源代码

發(fā)布時(shí)間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多索引表 (4)multi_index.hpp源代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 在線hpp源代碼

https://developers.eos.io/manuals/eosio.cdt/v1.7/group__multiindex

1.1 get_code和get_scope

//Returns the code member property. name eosio::multi_index< TableName, T, Indices >::get_code() const//Returns the scope member property. uint64_t eosio::multi_index< TableName, T, Indices >::get_scope() const

1.2 迭代

const_iterator eosio::multi_index< TableName, T, Indices >::cbegin() const const_iterator eosio::multi_index< TableName, T, Indices >::begin() const const_iterator eosio::multi_index< TableName, T, Indices >::cend() const const_iterator eosio::multi_index< TableName, T, Indices >::end() constconst_reverse_iterator eosio::multi_index< TableName, T, Indices >::crbegin() const const_reverse_iterator eosio::multi_index< TableName, T, Indices >::rbegin() const const_reverse_iterator eosio::multi_index< TableName, T, Indices >::crend() const const_reverse_iterator eosio::multi_index< TableName, T, Indices >::rend() constconst_iterator eosio::multi_index< TableName, T, Indices >::lower_bound(uint64_t primary ) constconst_iterator eosio::multi_index< TableName, T, Indices >::upper_bound(uint64_t primary ) const

eg.

void myaction() {// create reference to address_index - see emplace example below// add dan account to table - see emplace example below// add additional account - brendanaddresses.emplace(payer, [&](auto& address) {address.account_name = "brendan"_n;address.first_name = "Brendan";address.last_name = "Blumer";address.street = "1 EOS Way";address.city = "Hong Kong";address.state = "HK";address.zip = 93445;});uint32_t zipnumb = 93445;auto zip_index = addresses.get_index<name("zip")>();auto itr = zip_index.lower_bound(zipnumb);eosio::check(itr->account_name == name("brendan"), "Lock arf, Incorrect First Lower Bound Record ");itr++;eosio::check(itr->account_name == name("dan"), "Lock arf, Incorrect Second Lower Bound Record");itr++;eosio::check(itr == zip_index.end(), "Lock arf, Incorrect End of Iterator");}

1.3 available_primary_key

uint64_t eosio::multi_index< TableName, T, Indices >::available_primary_key() const

eg.

void myaction() {address_index addresses(_self, _self.value); // code, scope// add to table, first argument is account to bill for storageaddresses.emplace(payer, [&](auto& address) {address.key = addresses.available_primary_key();address.first_name = "Daniel";address.last_name = "Larimer";address.street = "1 EOS Way";address.city = "Blacksburg";address.state = "VA";}); }

1.4 get_index

template< IndexName> auto eosio::multi_index< TableName, T, Indices >::get_index()

eg.

#include <eosiolib/eosio.hpp> using namespace eosio; using namespace std; class addressbook: contract {struct address {uint64_t account_name;string first_name;string last_name;string street;string city;string state;uint32_t zip = 0;uint64_t primary_key() const { return account_name; }uint64_t by_zip() const { return zip; }};public:addressbook(name receiver, name code, datastream<const char*> ds):contract(receiver, code, ds) {}typedef eosio::multi_index< name("address"), address, indexed_by< name("zip"), const_mem_fun<address, uint64_t, &address::by_zip> > address_index;void myaction() {// create reference to address_index - see emplace example below// add dan account to table - see emplace example belowuint32_t zipnumb = 93446;auto zip_index = addresses.get_index<name("zip")>();auto itr = zip_index.find(zipnumb);eosio::check(itr->account_name == name("dan"), "Lock arf, Incorrect Record ");} } EOSIO_DISPATCH( addressbook, (myaction) )// This assumes the code from the get_index() example. Replace myaction() {...} void myaction() {// create reference to address_index - see emplace example below// add dan account to table - see emplace example below// add additional account - brendanaddresses.emplace(payer, [&](auto& address) {address.account_name = "brendan"_n;address.first_name = "Brendan";address.last_name = "Blumer";address.street = "1 EOS Way";address.city = "Hong Kong";address.state = "HK";address.zip = 93445;});uint32_t zipnumb = 93445;auto zip_index = addresses.get_index<name("zip")>();auto itr = zip_index.upper_bound(zipnumb);eosio::check(itr->account_name == name("dan"), "Lock arf, Incorrect First Upper Bound Record ");itr++;eosio::check(itr == zip_index.end(), "Lock arf, Incorrect End of Iterator");} } EOSIO_DISPATCH( addressbook, (myaction) )

1.5 iterator_to

const_iterator eosio::multi_index< TableName, T, Indices >::iterator_to(const T & obj ) const

eg.

// This assumes the code from the get_index() example. Replace myaction() {...} void myaction() {// create reference to address_index - see emplace example below// add dan account to table - see emplace example below// add additional account - brendanaddresses.emplace(payer, [&](auto& address) {address.account_name = "brendan"_n;address.first_name = "Brendan";address.last_name = "Blumer";address.street = "1 EOS Way";address.city = "Hong Kong";address.state = "HK";address.zip = 93445;});auto user = addresses.get("dan"_n);auto itr = address.find("dan"_n);eosio::check(iterator_to(user) == itr, "Invalid iterator");} } EOSIO_DISPATCH( addressbook, (myaction) )

1.6 get

const T& eosio::multi_index< TableName, T, Indices >::get(uint64_t primary,const char * error_msg = "unable to find key" ) const

eg.

void myaction() {// create reference to address_index - see emplace example// add dan account to table - see emplace exampleauto user = addresses.get("dan"_n);eosio::check(user.first_name == "Daniel", "Couldn't get him."); }

總結(jié)

以上是生活随笔為你收集整理的多索引表 (4)multi_index.hpp源代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。