COOPENOMICS  v1
Кооперативная Экономика
table_counts.hpp
См. документацию.
1#pragma once
2
3#include <eosio/eosio.hpp>
4
5#include "../core/utils.hpp"
6#include "../core/ram_payer.hpp"
7
8struct counts_base {
9 eosio::name key;
10 eosio::name secondary_key;
11 uint64_t value;
12
13 uint64_t primary_key() const { return key.value; }
14 uint128_t keyskey() const { return combine_ids(key.value, secondary_key.value); }
15 uint128_t keyvalue() const { return combine_ids(key.value, value); }
16};
17
18typedef eosio::multi_index<
19 "counts"_n, counts_base,
20 eosio::indexed_by<"keyskey"_n, eosio::const_mem_fun<counts_base, uint128_t, &counts_base::keyskey>>>
22
23// Счётчики идентификаторов — служебное хранение: платит контракт-владелец.
25
26uint64_t get_id(eosio::name code, eosio::name scope, eosio::name key) {
27 counts_index counts(code, scope.value);
28 auto count = counts.find(key.value);
29 uint64_t id = 1;
30
31 if (count == counts.end()) {
32 counts.emplace(RamPayer::of(counts), [&](auto &c) {
33 c.key = key;
34 c.value = id;
35 });
36 } else {
37 id = count->value + 1;
38 counts.modify(count, RamPayer::of(counts), [&](auto &c) { c.value = id; });
39 }
40
41 return id;
42}
43
44uint64_t get_global_id(eosio::name _me, eosio::name key) {
45 counts_index counts(_me, _me.value);
46 auto count = counts.find(key.value);
47 uint64_t id = 1;
48
49 if (count == counts.end()) {
50 counts.emplace(RamPayer::of(counts), [&](auto &c) {
51 c.key = key;
52 c.value = id;
53 });
54 } else {
55 id = count->value + 1;
56 counts.modify(count, RamPayer::of(counts), [&](auto &c) { c.value = id; });
57 }
58
59 return id;
60}
61
62uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key) {
63 counts_index counts(_me, scope.value);
64 auto count = counts.find(key.value);
65 uint64_t id = 1;
66
67 if (count == counts.end()) {
68 counts.emplace(RamPayer::of(counts), [&](auto &c) {
69 c.key = key;
70 c.value = id;
71 });
72 } else {
73 id = count->value + 1;
74 counts.modify(count, RamPayer::of(counts), [&](auto &c) { c.value = id; });
75 }
76
77 return id;
78}
contract
Definition: eosio.msig_tests.cpp:977
eosio::name of(const Table &table, eosio::name coopname)
Definition: ram_payer.hpp:78
Definition: table_counts.hpp:8
eosio::name key
Definition: table_counts.hpp:9
eosio::name secondary_key
Definition: table_counts.hpp:10
uint64_t primary_key() const
Definition: table_counts.hpp:13
uint128_t keyvalue() const
Definition: table_counts.hpp:15
uint64_t value
Definition: table_counts.hpp:11
uint128_t keyskey() const
Definition: table_counts.hpp:14
Таблица счетчиков
Definition: soviet.hpp:302
eosio::multi_index< "counts"_n, counts_base, eosio::indexed_by<"keyskey"_n, eosio::const_mem_fun< counts_base, uint128_t, &counts_base::keyskey > > > counts_index
Definition: table_counts.hpp:21
uint64_t get_id(eosio::name code, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:26
uint64_t get_global_id_in_scope(eosio::name _me, eosio::name scope, eosio::name key)
Definition: table_counts.hpp:62
uint64_t get_global_id(eosio::name _me, eosio::name key)
Definition: table_counts.hpp:44
RAM_PAYER_CLASS(counts_base, contract)
static uint128_t combine_ids(const uint64_t &x, const uint64_t &y)
Definition: utils.hpp:7