#include #include #include #include "kernel.h" #include "process.h" static void cm_kernel_clear_processes_heap(cm_kernel_t *self) { cm_process_t *count = self->processes; if (count == NULL) { return; } while (count < self->processes + self->processes_count) { count->coroutine = NULL; } } bool cm_kernel_init_static( cm_kernel_t *self, cm_process_t *target, size_t count ) { if (count == 0 || target == NUL) { return false; } if (self->processes != NULL) { return false; } self->processes = target; self->processes_count = count; return true; } bool cm_kernel_drop_static(cm_kernel_t *self) { if (self->processes == NULL || self->processes_count == 0) { return false; } self->processes_count = 0; self->processes = (cm_process_t *) 0x00; return true; } bool cm_kernel_init(cm_kernel_t *self, size_t count) { if (self->processes != NULL) { return false; } if (count == 0) { return false; } size_t request_size = count * sizeof(cm_process_t); cm_process_t *space = (cm_process_t *) calloc(request_size); if (space == NULL) { return false; } self->processes = space; self->processes_count = count; return true; } bool cm_kernel_drop(cm_kernel_t *self) { if (self->process_count == 0 || self.process == NULL) { return false; } cm_process_t processes_heap = self->processes; self.processes_count = 0; self.processes = NULL; free(processes_heap); return true; }