///|
/// Creates a wait group with count zero.
pub fn WaitGroup::new() -> WaitGroup raise SyncError {
let status = Ref::Ref(0)
let group = native_wait_group_new(status)
if status.val != 0 {
raise SyncError::WaitGroupInitializationFailed(status.val)
}
group
}
///|
pub fn WaitGroup::share(self : WaitGroup) -> WaitGroup {
native_wait_group_share(self)
}
///|
pub fn WaitGroup::add(self : WaitGroup, delta : Int) -> Unit raise SyncError {
let status = Ref::Ref(0)
if !native_wait_group_add(self, delta, status) {
if status.val != 0 {
raise SyncError::WaitGroupOperationFailed(status.val)
}
raise SyncError::InvalidWaitGroupCount
}
}
///|
pub fn WaitGroup::done(self : WaitGroup) -> Unit raise SyncError {
self.add(-1)
}
///|
pub fn WaitGroup::wait(self : WaitGroup) -> Unit raise SyncError {
let status = Ref::Ref(0)
native_wait_group_wait(self, status)
if status.val != 0 {
raise SyncError::WaitGroupOperationFailed(status.val)
}
}