Helixis 1.0
Task Programming API
sources/liblfds/liblfds.h
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines