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