![]() |
Helixis 1.0
Task Programming API
|
00001 #ifndef __LIBLFDS_H 00002 # define __LIBLFDS_H /* Helixis patch :) */ 00003 00004 #include "hlx/core.h" 00005 #include "helixis_internal.h" 00006 00007 #if defined(HLX_BUILD_WITH_PARALLEL_THREADING) 00008 00009 /***** library header *****/ 00010 #define LIBLFDS_RELEASE_NUMBER 6 00011 00012 /***** enums *****/ 00013 enum data_structure_validity 00014 { 00015 VALIDITY_VALID, 00016 VALIDITY_INVALID_LOOP, 00017 VALIDITY_INVALID_MISSING_ELEMENTS, 00018 VALIDITY_INVALID_ADDITIONAL_ELEMENTS, 00019 VALIDITY_INVALID_TEST_DATA 00020 }; 00021 00022 /***** structs *****/ 00023 struct validation_info 00024 { 00025 atom_t 00026 min_elements, 00027 max_elements; 00028 }; 00029 00030 /***** freelist *****/ 00031 00032 /***** enums *****/ 00033 enum freelist_query_type 00034 { 00035 FREELIST_QUERY_ELEMENT_COUNT, 00036 FREELIST_QUERY_VALIDATE 00037 }; 00038 00039 /***** incomplete types *****/ 00040 struct freelist_state; 00041 struct freelist_element; 00042 00043 /***** public prototypes *****/ 00044 int freelist_new( struct freelist_state **fs, atom_t number_elements, int (*user_data_init_function)(void **user_data, void *user_state), void *user_state ); 00045 void freelist_delete( struct freelist_state *fs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state ); 00046 00047 atom_t freelist_new_elements( struct freelist_state *fs, atom_t number_elements ); 00048 00049 struct freelist_element *freelist_pop( struct freelist_state *fs, struct freelist_element **fe ); 00050 struct freelist_element *freelist_guaranteed_pop( struct freelist_state *fs, struct freelist_element **fe ); 00051 void freelist_push( struct freelist_state *fs, struct freelist_element *fe ); 00052 00053 void *freelist_get_user_data_from_element( struct freelist_element *fe, void **user_data ); 00054 void freelist_set_user_data_in_element( struct freelist_element *fe, void *user_data ); 00055 00056 void freelist_query( struct freelist_state *fs, enum freelist_query_type query_type, void *query_input, void *query_output ); 00057 00058 00059 00060 00061 /***** queue *****/ 00062 00063 /***** enums *****/ 00064 enum queue_query_type 00065 { 00066 QUEUE_QUERY_ELEMENT_COUNT, 00067 QUEUE_QUERY_VALIDATE 00068 }; 00069 00070 /***** incomplete types *****/ 00071 struct queue_state; 00072 00073 /***** public prototypes *****/ 00074 int queue_new( struct queue_state **sq, atom_t number_elements ); 00075 void queue_delete( struct queue_state *qs, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state ); 00076 00077 int queue_enqueue( struct queue_state *qs, void *user_data ); 00078 int queue_guaranteed_enqueue( struct queue_state *qs, void *user_data ); 00079 int queue_dequeue( struct queue_state *qs, void **user_data ); 00080 00081 void queue_query( struct queue_state *qs, enum queue_query_type query_type, void *query_input, void *query_output ); 00082 00083 00084 00085 00086 /***** slist *****/ 00087 00088 /***** incomplete types *****/ 00089 struct slist_state; 00090 struct slist_element; 00091 00092 /***** public prototypes *****/ 00093 int slist_new( struct slist_state **ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state ); 00094 void slist_delete( struct slist_state *ss ); 00095 00096 struct slist_element *slist_new_head( struct slist_state *ss, void *user_data ); 00097 struct slist_element *slist_new_next( struct slist_element *se, void *user_data ); 00098 00099 void slist_delete_element( struct slist_state *ss, struct slist_element *se ); 00100 void slist_delete_all_elements( struct slist_state *ss ); 00101 00102 int slist_get_user_data_from_element( struct slist_element *se, void **user_data ); 00103 int slist_set_user_data_in_element( struct slist_element *se, void *user_data ); 00104 00105 struct slist_element *slist_get_head( struct slist_state *ss, struct slist_element **se ); 00106 struct slist_element *slist_get_next( struct slist_element *se, struct slist_element **next_se ); 00107 struct slist_element *slist_get_head_and_then_next( struct slist_state *ss, struct slist_element **se ); 00108 00109 #endif /* !HLX_BUILD_WITH_KERNEL_THREAD */ 00110 00111 #define __LIBLFDS_H 00112 00113 #endif 00114