15#ifndef THREAD_FIBER_SELECTABLES_H_
16#define THREAD_FIBER_SELECTABLES_H_
20#include <absl/base/thread_annotations.h>
21#include <absl/log/check.h>
23#include "thread/boost_primitives.h"
24#include "thread/cases.h"
29class PermanentEvent final :
public internal::Selectable {
35 DCHECK(cases_to_be_selected_ ==
nullptr);
58 bool Handle(internal::CaseInSelectClause* absl_nonnull case_state,
59 bool enqueue)
override;
61 internal::CaseInSelectClause* absl_nonnull case_state)
override;
67 std::atomic<bool> notified_{
false};
69 internal::CaseInSelectClause* absl_nullable cases_to_be_selected_
70 ABSL_GUARDED_BY(mu_) =
nullptr;
Definition boost_primitives.h:95
Definition boost_primitives.h:34
Definition selectables.h:15
PermanentEvent & operator=(const PermanentEvent &)=delete
bool HasBeenNotified() const
PermanentEvent(const PermanentEvent &)=delete
~PermanentEvent() override
Definition selectables.h:33
void Unregister(internal::CaseInSelectClause *case_state) override
Definition selectables.cc:34
bool Handle(internal::CaseInSelectClause *case_state, bool enqueue) override
Definition selectables.cc:21
Case OnEvent() const
Definition selectables.h:52
Case NonSelectableCase()
Definition selectables.cc:91
Case AlwaysSelectableCase()
Definition selectables.cc:95
A Case represents a selectable case in a Select statement.
Definition cases.h:55