15#ifndef THREAD_FIBER_SELECTABLES_H_ 
   16#define THREAD_FIBER_SELECTABLES_H_ 
   20#include <absl/log/check.h> 
   22#include "thread/cases.h" 
   36class PermanentEvent final : 
public internal::Selectable {
 
   38  PermanentEvent() = 
default;
 
   40  ~PermanentEvent()
 override {
 
   44    DCHECK(cases_to_be_selected_ == 
nullptr);
 
   47  PermanentEvent(
const PermanentEvent&) = 
delete;
 
   48  PermanentEvent& operator=(
const PermanentEvent&) = 
delete;
 
   56  bool HasBeenNotified() 
const;
 
   61  Case OnEvent()
 const {
 
   62    Case c = {
const_cast<PermanentEvent*
>(
this)};
 
   67  bool Handle(internal::CaseInSelectClause* c, 
bool enqueue) 
override;
 
   68  void Unregister(internal::CaseInSelectClause* c) 
override;
 
   73  boost::fibers::detail::spinlock splk_;
 
   74  std::atomic<bool> notified_{
false};
 
   76  internal::CaseInSelectClause* cases_to_be_selected_ = 
nullptr;
 
   99Case NonSelectableCase();
 
  122Case AlwaysSelectableCase();
 
A Case represents a selectable case in a Select statement.
Definition cases.h:80