32 #include <sys/types.h> 34 #ifndef SIMCLIST_NO_DUMPRESTORE 36 # include <sys/time.h> 44 #if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L 57 typedef int32_t list_hash_t;
59 #ifndef SIMCLIST_NO_DUMPRESTORE 62 struct timeval timestamp;
65 list_hash_t list_hash;
80 typedef int (*element_comparator)(
const void *a,
const void *b);
93 typedef int (*element_seeker)(
const void *el,
const void *indicator);
104 typedef size_t (*element_meter)(
const void *el);
115 typedef list_hash_t (*element_hash_computer)(
const void *el);
135 typedef void *(*element_serializer)(
const void *restrict el, uint32_t *restrict serializ_len);
152 typedef void *(*element_unserializer)(
const void *restrict data, uint32_t *restrict data_len);
166 element_comparator comparator;
168 element_seeker seeker;
173 element_hash_computer hasher;
175 element_serializer serializer;
177 element_unserializer unserializer;
190 unsigned int spareelsnum;
192 #ifdef SIMCLIST_WITH_THREADS 194 unsigned int threadcount;
199 unsigned int iter_pos;
212 int list_init(
list_t *restrict l);
223 void list_destroy(
list_t *restrict l);
237 int list_attributes_comparator(
list_t *restrict l, element_comparator comparator_fun);
251 int list_attributes_seeker(
list_t *restrict l, element_seeker seeker_fun);
283 int list_attributes_copy(
list_t *restrict l, element_meter metric_fun,
int copy_data);
303 int list_attributes_hash_computer(
list_t *restrict l, element_hash_computer hash_computer_fun);
324 int list_attributes_serializer(
list_t *restrict l, element_serializer serializer_fun);
346 int list_attributes_unserializer(
list_t *restrict l, element_unserializer unserializer_fun);
358 int list_append(
list_t *restrict l,
const void *data);
370 int list_prepend(
list_t *restrict l,
const void *restrict data);
380 void *list_fetch(
list_t *restrict l);
389 void *list_get_at(
const list_t *restrict l,
unsigned int pos);
403 void *list_get_max(
const list_t *restrict l);
417 void *list_get_min(
const list_t *restrict l);
426 void *list_extract_at(
list_t *restrict l,
unsigned int pos);
436 int list_insert_at(
list_t *restrict l,
const void *data,
unsigned int pos);
453 int list_delete(
list_t *restrict l,
const void *data);
462 int list_delete_at(
list_t *restrict l,
unsigned int pos);
472 int list_delete_range(
list_t *restrict l,
unsigned int posstart,
unsigned int posend);
485 int list_clear(
list_t *restrict l);
493 unsigned int list_size(
const list_t *restrict l);
503 int list_empty(
const list_t *restrict l);
522 int list_locate(
const list_t *restrict l,
const void *data);
537 void *list_seek(
list_t *restrict l,
const void *indicator);
558 int list_contains(
const list_t *restrict l,
const void *data);
594 int list_sort(
list_t *restrict l,
int versus);
606 int list_iterator_start(
list_t *restrict l);
614 void *list_iterator_next(
list_t *restrict l);
622 int list_iterator_hasnext(
const list_t *restrict l);
630 int list_iterator_stop(
list_t *restrict l);
640 int list_hash(
const list_t *restrict l, list_hash_t *restrict hash);
642 #ifndef SIMCLIST_NO_DUMPRESTORE 658 int list_dump_getinfo_filedescriptor(
int fd,
list_dump_info_t *restrict info);
673 int list_dump_getinfo_file(
const char *restrict filename,
list_dump_info_t *restrict info);
709 int list_dump_filedescriptor(
const list_t *restrict l,
int fd,
size_t *restrict len);
732 int list_dump_file(
const list_t *restrict l,
const char *restrict filename,
size_t *restrict len);
752 int list_restore_filedescriptor(
list_t *restrict l,
int fd,
size_t *restrict len);
770 int list_restore_file(
list_t *restrict l,
const char *restrict filename,
size_t *len);
779 int list_comparator_int8_t(
const void *a,
const void *b);
785 int list_comparator_int16_t(
const void *a,
const void *b);
791 int list_comparator_int32_t(
const void *a,
const void *b);
797 int list_comparator_int64_t(
const void *a,
const void *b);
803 int list_comparator_uint8_t(
const void *a,
const void *b);
809 int list_comparator_uint16_t(
const void *a,
const void *b);
815 int list_comparator_uint32_t(
const void *a,
const void *b);
821 int list_comparator_uint64_t(
const void *a,
const void *b);
827 int list_comparator_float(
const void *a,
const void *b);
833 int list_comparator_double(
const void *a,
const void *b);
839 int list_comparator_string(
const void *a,
const void *b);
846 size_t list_meter_int8_t(
const void *el);
852 size_t list_meter_int16_t(
const void *el);
858 size_t list_meter_int32_t(
const void *el);
864 size_t list_meter_int64_t(
const void *el);
870 size_t list_meter_uint8_t(
const void *el);
876 size_t list_meter_uint16_t(
const void *el);
882 size_t list_meter_uint32_t(
const void *el);
888 size_t list_meter_uint64_t(
const void *el);
894 size_t list_meter_float(
const void *el);
900 size_t list_meter_double(
const void *el);
906 size_t list_meter_string(
const void *el);
913 list_hash_t list_hashcomputer_int8_t(
const void *el);
919 list_hash_t list_hashcomputer_int16_t(
const void *el);
925 list_hash_t list_hashcomputer_int32_t(
const void *el);
931 list_hash_t list_hashcomputer_int64_t(
const void *el);
937 list_hash_t list_hashcomputer_uint8_t(
const void *el);
943 list_hash_t list_hashcomputer_uint16_t(
const void *el);
949 list_hash_t list_hashcomputer_uint32_t(
const void *el);
955 list_hash_t list_hashcomputer_uint64_t(
const void *el);
961 list_hash_t list_hashcomputer_float(
const void *el);
967 list_hash_t list_hashcomputer_double(
const void *el);
973 list_hash_t list_hashcomputer_string(
const void *el);