载入中...
搜索中...
未找到
EconomyLedgerResourceAccount.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
12
13#include <cstdint>
14#include <unordered_map>
15
16namespace eve::economy {
17
32public:
35
40
42 ~EconomyLedgerResourceAccount() override = default;
43
46 [[nodiscard]] eve::Result<eve::resource::Affordability> canAfford(
47 const eve::resource::CostSpec& cost) const override;
48
51 [[nodiscard]] eve::Result<eve::resource::Reservation> reserve(const eve::resource::CostSpec& cost) override;
52
55 [[nodiscard]] eve::Result<eve::resource::Receipt> debit(const eve::resource::CostSpec& cost) override;
56
59 [[nodiscard]] eve::Result<eve::resource::Receipt> credit(const eve::resource::CostSpec& cost) override;
60
63 [[nodiscard]] eve::Result<eve::resource::Receipt> commit(const eve::resource::Reservation& reservation) override;
64
67 [[nodiscard]] eve::Result<void> rollback(const eve::resource::Reservation& reservation) override;
68
69private:
70 enum class ReservationState : std::uint8_t { Active, Committed, RolledBack };
71
72 struct ReservationRecord {
74 ReservationState state = ReservationState::Active;
75 };
76
77 [[nodiscard]] eve::Result<std::int64_t> balanceOf(const eve::resource::ResourceId& resource) const;
78 [[nodiscard]] eve::Result<std::int64_t> activeReservationsFor(const eve::resource::ResourceId& resource) const;
79 [[nodiscard]] eve::Result<void> activeReservationsAreCovered() const;
80 [[nodiscard]] eve::Result<void> applyDelta(const eve::resource::CostSpec& cost, bool debit);
81 [[nodiscard]] eve::Result<void> validateLedgerRange(const eve::resource::CostSpec& cost, bool debit) const;
82
83 EconomyLedger& ledger_;
84 std::unordered_map<eve::resource::ReservationId, ReservationRecord> reservations_;
85 eve::resource::AccountNonce accountNonce_;
86 eve::resource::ReservationId nextReservation_{1};
87 eve::resource::ReceiptId nextReceipt_{1};
88};
89
90} // namespace eve::economy
eve::resource::CostSpec cost
#define EVENGINE_API_FOUNDATION
每个链接组(link group)各自的导出宏。
Definition Export.h:106
Strongly typed, transaction-friendly resource cost protocol.
std::string resource
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Adapts one caller-owned EconomyLedger to IResourceAccount.
EconomyLedgerResourceAccount(const EconomyLedgerResourceAccount &)=delete
EconomyLedgerResourceAccount & operator=(const EconomyLedgerResourceAccount &)=delete
EconomyLedgerResourceAccount(EconomyLedgerResourceAccount &&)=delete
~EconomyLedgerResourceAccount() override=default
Economy ledger resource account.
EconomyLedgerResourceAccount & operator=(EconomyLedgerResourceAccount &&)=delete
单个玩家的资源账本:当前量、上限、收支与浪费统计。
Opaque process-local identity of the account that issued a credential.
Immutable canonical multi-resource cost.
Provider-neutral resource account contract.
Strong identity of a resource kind, such as mana or gold.
Reservation credential returned by a successful reserve operation.