载入中...
搜索中...
未找到
SettlementBatch.cpp
浏览该文件的文档.
23eve::Result<std::vector<SettlementResult>> SettlementPipeline::settleAtomic(std::span<const SettlementRequest> requests,
31 eve::DiagnosticCode::InvalidArgument, "atomic settlement request and policy counts must match", "policies");
113 eve::DiagnosticCode::Failed, std::string("atomic settlement event append threw: ") + exception.what(),
124 eve::DiagnosticCode::Failed, "atomic settlement event append threw an unknown exception", "events");
129 std::any_of(results.begin(), results.end(), [](const auto& result) { return result.applied != 0.0; });
131 std::move(results), eve::Status::success(anyApplied ? eve::StatusCode::Applied : eve::StatusCode::NoOp));
139 eve::DiagnosticCode::InvalidArgument, "independent settlement requires at least one request", "requests");
142 eve::DiagnosticCode::InvalidArgument, "independent settlement request and policy counts must match",
166 std::move(outcomes), eve::Status::success(anyApplied ? eve::StatusCode::Applied : eve::StatusCode::NoOp));
174 eve::DiagnosticCode::InvalidArgument, "settlement chain request executor must not be empty", "execute");
177 eve::DiagnosticCode::InvalidArgument, "settlement chain limit must include at least the root request",
182 eve::DiagnosticCode::InvalidArgument, "settlement chain root contains derived-chain metadata", "root.chain");
231 eve::DiagnosticCode::Conflict, "settlement chain exceeded its depth limit", "maxDepth")), child);
235 if (std::find(pending[cursor].chain.triggerPath.begin(), pending[cursor].chain.triggerPath.end(),
243 if (child.chain.depth != 0 || child.chain.emittedCount != 0 || !child.chain.triggerPath.empty()) {
245 eve::DiagnosticCode::InvalidArgument, "policy-produced request must not pre-populate chain metadata",
258 if (child.causation.kind() == game_event::CausationRef::Kind::None && outcomes.back().result->event &&
260 child.causation = game_event::CausationRef::fromEventId(outcomes.back().result->event->eventId);
267 std::move(outcomes), eve::Status::success(anyApplied ? eve::StatusCode::Applied : eve::StatusCode::NoOp));
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
static Status failure(StatusCode code, Diagnostic diagnostic)
Construct a failed status with one diagnostic.
Definition Status.h:84
static Status success(StatusCode code=StatusCode::Ok)
Construct a successful status with an explicit non-error outcome.
Definition Status.h:81
static CausationRef fromEventId(EventId value)
Creates a causation reference to an event.
Definition GameEvent.h:105
Deterministic in-memory stream of topic-neutral event envelopes.
Definition GameEvent.h:261
Mutable calculation frame visible to policy and custom stage code.
Definition Settlement.h:338
std::function< eve::Result< SettlementResult >(const SettlementRequest &)> RequestExecutor
Executes one owning chain request using its request-specific policy and rule snapshot.
Definition Settlement.h:546
eve::Result< SettlementResult > settle(const SettlementRequest &request, ISettlementPolicy &policy, game_event::GameEventLog *events=nullptr) const
Execute one settlement transaction against a domain policy.
Definition Settlement.cpp:744
eve::Result< std::vector< SettlementBatchItemResult > > settleChain(const SettlementRequest &root, const RequestExecutor &execute, std::uint32_t maxDepth, std::uint32_t maxSettlements) const
Settle a root request and its policy-produced derived requests in stable breadth-first order.
Definition SettlementBatch.cpp:169
eve::Result< std::vector< SettlementBatchItemResult > > settleIndependent(std::span< const SettlementRequest > requests, std::span< ISettlementPolicy * > policies, game_event::GameEventLog *events=nullptr) const
Settle several channels independently in caller-provided deterministic order.
Definition SettlementBatch.cpp:134
eve::Result< std::vector< SettlementResult > > settleAtomic(std::span< const SettlementRequest > requests, std::span< ISettlementPolicy * > policies, game_event::GameEventLog *events=nullptr) const
Prepare and commit several independent resource channels atomically.
Definition SettlementBatch.cpp:23
Definition Settlement.cpp:10
@ InvalidArgument
@ Failed
@ Conflict
@ NoOp
@ Applied
Domain-neutral, deterministic settlement pipeline.
EventSequence sequence
Sequence assigned by the owning stream; it is never global identity.
Definition GameEvent.h:187
Indexed owning outcome for one independently committed settlement item.
Definition Settlement.h:265
std::optional< SettlementResult > result
Definition Settlement.h:269
SettlementRequest request
Definition Settlement.h:267
Domain-neutral input to one settlement operation.
Definition Settlement.h:107