1 /** 2 * @file condition.h 3 * 4 * @version 2.2.5 5 * 6 * ----------------------------------------------------------------------------- 7 * 8 * SPDX-License-Identifier: MIT 9 * 10 * Copyright (c) 2018-2024 Ryan M. Lederman <lederman@gmail.com> 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a copy of 13 * this software and associated documentation files (the "Software"), to deal in 14 * the Software without restriction, including without limitation the rights to 15 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 16 * the Software, and to permit persons to whom the Software is furnished to do so, 17 * subject to the following conditions: 18 * 19 * The above copyright notice and this permission notice shall be included in all 20 * copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 24 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 25 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 26 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 27 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28 * 29 * ----------------------------------------------------------------------------- 30 */ 31 32 #ifndef _SIR_CONDITION_H_INCLUDED 33 # define _SIR_CONDITION_H_INCLUDED 34 35 # include "sir/types.h" 36 37 /** 38 * Creates/initializes a new condition variable. 39 * 40 * @param cond Pointer to a sir_condition to initialize 41 * @returns bool `true` if successful, `false` otherwise. 42 */ 43 bool _sir_condcreate(sir_condition* cond); 44 45 # if 0 46 /** 47 * Signals a condition variable. 48 * 49 * @param cond Pointer to a sir_condition to signal. 50 * @returns bool `true` if successful, `false` otherwise. 51 */ 52 bool _sir_condsignal(sir_condition* cond); 53 # endif 54 55 /** 56 * Broadcast signals a condition variable. 57 * 58 * @param cond Pointer to a sir_condition to broadcast on. 59 * @returns bool `true` if successful, `false` otherwise. 60 */ 61 bool _sir_condbroadcast(sir_condition* cond); 62 63 /** 64 * Destroys a condition variable. 65 * 66 * @param cond Pointer to a sir_condition to destroy. 67 * @returns bool `true` if successful, `false` otherwise. 68 */ 69 bool _sir_conddestroy(sir_condition* cond); 70 71 # if 0 72 /** 73 * Waits indefinitely for a condition variable to become signaled. 74 * 75 * @param cond Pointer to a sir_condition to wait on. 76 * @returns bool `true` if successful, `false` otherwise. 77 */ 78 bool _sir_condwait(sir_condition* cond, sir_mutex* mutex); 79 # endif 80 81 /** 82 * Waits a given amount of time for a condition variable to become signaled. 83 * 84 * @param cond Pointer to a sir_condition to wait on. 85 * @param mutex Associated mutex object. 86 * @param howlong How long to wait before timing out. 87 * @returns bool `true` if successful, `false` if an error occurred or the operation 88 * timed out.. 89 */ 90 bool _sir_condwait_timeout(sir_condition* cond, sir_mutex* mutex, const sir_wait* howlong); 91 92 #endif /* !_SIR_CONDITION_H_INCLUDED */