// Copyright (C) 2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package typedsync import ( "sync" ) // Cond is a type-safe equivalent of the standard library's sync.Cond. // // See the [sync.Cond documentation] for full details. // // [sync.Cond documentation]: https://pkg.go.dev/sync#Cond type Cond[T Locker] struct { L T inner sync.Cond } func NewCond[T Locker](l T) *Cond[T] { return &Cond[T]{L: l} } func (c *Cond[T]) Broadcast() { c.inner.L = c.L c.inner.Broadcast() } func (c *Cond[T]) Signal() { c.inner.L = c.L c.inner.Signal() } func (c *Cond[T]) Wait() { c.inner.L = c.L c.inner.Wait() }