| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include <zivuos.h>
- #include <stddef.h>
- #include <stdint.h>
- #include <stdbool.h>
- static inline bool __zv_event_already_set(zv_event_t *target) {
- return target->type != ZV_EVENT_EMPTY;
- }
- static bool __zv_event_push_content(
- zv_kernel_t *self,
- zv_tid_t target_tid,
- zv_event_type_t type,
- zv_event_content_t content
- ) {
- zv_task_t *target_task = __zv_kernel_get_task(self, target_tid);
- if (target_task == NULL) {
- return false;
- }
- zv_event_t *target_event = &target_task->event;
- if (__zv_event_already_set(target_event)) {
- return false;
- }
- target_event->content = content;
- target_event->type = type;
- return true;
- }
- bool zv_event_push_number(
- struct zv_kernel_s *self,
- zv_tid_t target,
- int64_t content
- ) {
- return __zv_event_push_content(
- self,
- target,
- ZV_EVENT_DATA,
- (zv_event_content_t) {.number = content}
- );
- }
- bool zv_event_push_unumber(
- struct zv_kernel_s *self,
- zv_tid_t target,
- uint64_t content
- ) {
- return __zv_event_push_content(
- self,
- target,
- ZV_EVENT_UDATA,
- (zv_event_content_t) {.unumber = content}
- );
- }
- bool zv_event_set_timer(
- struct zv_kernel_s *self,
- zv_tid_t target,
- zv_time_t delay
- ) {
- zv_time_t result_time = zv_time_after(zv_time_get_time(), delay);
- return __zv_event_push_content(
- self,
- target,
- ZV_EVENT_TIMER_PHRASE_FIRST,
- (zv_event_content_t) {.time = result_time}
- );
- }
- bool zv_event_push_object(
- struct zv_kernel_s *self,
- zv_tid_t target,
- void *content
- ) {
- return __zv_event_push_content(
- self,
- target,
- ZV_EVENT_OBJECT,
- (zv_event_content_t) {.object = content}
- );
- }
|