39 using Decision = std::variant<Check, Exempt>;
54 return std::holds_alternative<Check>(decision_)
58 const auto*
check = std::get_if<Check>(&decision_);
68 double raw_fill_base_;
79 bool pending()
const {
return pending_.has_value(); }
84 return pending_ && pending_->requires_adverse_pass();
87 return pending_ ? pending_->raw_fill_base()
88 : std::numeric_limits<double>::quiet_NaN();
90 const std::optional<OpeningReceipt>&
peek()
const {
return pending_; }
97 std::optional<OpeningReceipt>
take(int64_t live_position_cycle) {
98 auto receipt = std::exchange(pending_, std::nullopt);
99 if (receipt && receipt->owner().positionCycle != live_position_cycle)
107 if (!pending_ || !(pending_->owner() == owner))
return false;
113 std::optional<OpeningReceipt> pending_;
const std::optional< OpeningReceipt > & peek() const
void replace(OpeningReceipt receipt)
bool requires_adverse_pass() const
bool consume(const OpeningOwner &owner)
std::optional< OpeningReceipt > take(int64_t live_position_cycle)
double raw_fill_base() const
static OpeningReceipt exempt(OpeningOwner owner, double raw_fill_base)
const OpeningOwner & owner() const
static OpeningReceipt check(OpeningOwner owner, double raw_fill_base, OpeningContinuation continuation=OpeningContinuation::None)
bool requires_adverse_pass() const
OpeningDecision decision() const
double raw_fill_base() const
bool operator==(const OpeningOwner &owner, const OpeningOwner &other)
uint64_t orderIncarnation