载入中...
搜索中...
未找到
AttributeSetResourceAccount.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
12
13#include <cstdint>
14#include <unordered_map>
15
16namespace eve::attributes {
17
31public:
33 explicit AttributeSetResourceAccount(AttributeSet& attributes);
34
39
41 ~AttributeSetResourceAccount() override = default;
42
45 [[nodiscard]] eve::Result<eve::resource::Affordability> canAfford(
46 const eve::resource::CostSpec& cost) const override;
47
50 [[nodiscard]] eve::Result<eve::resource::Reservation> reserve(const eve::resource::CostSpec& cost) override;
51
54 [[nodiscard]] eve::Result<eve::resource::Receipt> debit(const eve::resource::CostSpec& cost) override;
55
58 [[nodiscard]] eve::Result<eve::resource::Receipt> credit(const eve::resource::CostSpec& cost) override;
59
62 [[nodiscard]] eve::Result<eve::resource::Receipt> commit(const eve::resource::Reservation& reservation) override;
63
66 [[nodiscard]] eve::Result<void> rollback(const eve::resource::Reservation& reservation) override;
67
68private:
69 enum class ReservationState : std::uint8_t { Active, Committed, RolledBack };
70
71 struct ReservationRecord {
73 ReservationState state = ReservationState::Active;
74 };
75
76 [[nodiscard]] eve::Result<std::int64_t> balanceOf(const eve::resource::ResourceId& resource) const;
77 [[nodiscard]] eve::Result<std::int64_t> activeReservationsFor(const eve::resource::ResourceId& resource) const;
78 [[nodiscard]] eve::Result<void> activeReservationsAreCovered() const;
79 [[nodiscard]] eve::Result<void> applyDelta(const eve::resource::CostSpec& cost, bool debit);
80
81 AttributeSet& attributes_;
82 std::unordered_map<eve::resource::ReservationId, ReservationRecord> reservations_;
83 eve::resource::AccountNonce accountNonce_;
84 eve::resource::ReservationId nextReservation_{1};
85 eve::resource::ReceiptId nextReceipt_{1};
86};
87
88} // namespace eve::attributes
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 integral AttributeSet base values to IResourceAccount.
AttributeSetResourceAccount & operator=(AttributeSetResourceAccount &&)=delete
~AttributeSetResourceAccount() override=default
Attribute set resource account.
AttributeSetResourceAccount(AttributeSetResourceAccount &&)=delete
AttributeSetResourceAccount(const AttributeSetResourceAccount &)=delete
AttributeSetResourceAccount & operator=(const AttributeSetResourceAccount &)=delete
Generic owning collection of canonical attributes and modifiers.
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.