00001 #ifndef __si_std_queue_h__3b94b7d2_2a35_42a4_bd1a_4617fa9f7d2e 00002 #define __si_std_queue_h__3b94b7d2_2a35_42a4_bd1a_4617fa9f7d2e 00003 00004 #include <si_sys/defs.h> 00005 #include <si_sys/blkalloc.h> 00006 00014 typedef struct sc_queueNode sc_queueNode; 00015 00020 struct sc_queueNode { 00021 sc_queueNode* next; 00022 }; 00023 00024 typedef sc_status (*sc_queueNode_constructCopy_f)(void*, void*); 00026 typedef sc_status (*sc_queueNode_assign_f)(void*, void*); 00028 typedef sc_status (*sc_queueNode_destruct_f)(void*); 00037 typedef struct sc_queueNodeDesc { 00038 s_uint32 nodeSize; 00039 sc_queueNode_constructCopy_f constructCopy; 00040 sc_queueNode_assign_f assign; 00041 sc_queueNode_destruct_f destruct; 00042 } sc_queueNodeDesc; 00043 00047 typedef struct sc_queue { 00048 00049 sc_blockAllocator blka; 00050 const sc_queueNodeDesc* desc; 00051 sc_queueNode* head; 00052 sc_queueNode* tail; 00054 } sc_queue; 00055 00056 sc_status sc_queue_construct(sc_queue* q, 00057 const sc_queueNodeDesc* desc, 00058 s_int32 initialCapacity); 00067 sc_status sc_queue_pushBack(sc_queue* q, void* pnt); 00073 sc_status sc_queue_popFront(sc_queue* q, void* pnt); 00083 sc_status sc_queue_destruct(sc_queue* q); 00087 #endif /* __si_std_queue_h__3b94b7d2_2a35_42a4_bd1a_4617fa9f7d2e */