int list_attributes_hash_computer(list_t *l, element_hash_computer hash_computer_fun) { if (l == NULL) return -1; l->attrs.hasher = hash_computer_fun; assert(list_attrOk(l)); return 0; }
int list_attributes_unserializer(list_t *l, element_unserializer unserializer_fun) { if (l == NULL) return -1; l->attrs.unserializer = unserializer_fun; assert(list_attrOk(l)); return 0; }
/* list initialization */ int list_init(list_t *l) { if (l == NULL) return -1; srandom((unsigned long)time(NULL)); l->numels = 0; /* head/tail sentinels and mid pointer */ l->head_sentinel = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); l->tail_sentinel = (struct list_entry_s *)malloc(sizeof(struct list_entry_s)); l->head_sentinel->next = l->tail_sentinel; l->tail_sentinel->prev = l->head_sentinel; l->head_sentinel->prev = l->tail_sentinel->next = l->mid = NULL; l->head_sentinel->data = l->tail_sentinel->data = NULL; /* iteration attributes */ l->iter_active = 0; l->iter_pos = 0; l->iter_curentry = NULL; /* free-list attributes */ l->spareels = (struct list_entry_s **)malloc(SIMCLIST_MAX_SPARE_ELEMS * sizeof(struct list_entry_s *)); l->spareelsnum = 0; #ifdef SIMCLIST_WITH_THREADS l->threadcount = 0; #endif list_attributes_setdefaults(l); assert(list_repOk(l)); assert(list_attrOk(l)); return 0; }
int list_attributes_copy(list_t *l, element_meter metric_fun, int copy_data) { if (metric_fun == NULL && copy_data != 0) return -1; l->attrs.meter = metric_fun; l->attrs.copy_data = copy_data; assert(list_attrOk(l)); return 0; }
int list_attributes_seeker(list_t *l, element_seeker seeker_fun) { if (l == NULL) return -1; l->attrs.seeker = seeker_fun; assert(list_attrOk(l)); return 0; }
/* setting list properties */ int list_attributes_comparator(list_t *l, element_comparator comparator_fun) { if (l == NULL) return -1; l->attrs.comparator = comparator_fun; assert(list_attrOk(l)); return 0; }
int list_attributes_setdefaults(list_t *l) { l->attrs.comparator = NULL; /* also free() element data when removing and element from the list */ l->attrs.meter = NULL; l->attrs.copy_data = 0; l->attrs.hasher = NULL; assert(list_attrOk(l)); return 0; }