list_element * _list_prev (list_element * elem) { if (!elem || ! (elem = get_element (elem)->prev)) return 0; return (list_element *) get_value_ptr (elem); }
void _list_push_front (list_head ** p_list, size_t value_size, void * value) { if (!*p_list) *p_list = (list_head *) calloc (sizeof (list_head), 1); list_head * list = *p_list; ++ list->length; list_element * elem = (list_element *) malloc (sizeof (*elem) + value_size); memset (elem, 0, sizeof (*elem)); memcpy (get_value_ptr (elem), value, value_size); elem->list = list; elem->next = list->first; if (list->first) { list->first->prev = elem; list->first = elem; } else { list->first = list->last = elem; } }
list_element * _list_next (list_element * elem) { if (!elem || ! (elem = get_element (elem)->next)) return 0; return (list_element *) get_value_ptr (elem); }
static int set_value(void *self, const char *name, void *array) { void *dest = NULL; if (get_value_ptr(self, name, &dest) == BMI_FAILURE) { return BMI_FAILURE; } else { int nbytes = 0; return_on_error(get_var_nbytes(self, name, &nbytes)); memcpy(dest, array, nbytes); return BMI_SUCCESS; } }
static int get_value(void *self, const char *name, void *dest) { void *src = NULL; if (get_value_ptr(self, name, &src) == BMI_FAILURE) { return BMI_FAILURE; } else { int nbytes; return_on_error(get_var_nbytes(self, name, &nbytes)); memcpy(dest, src, nbytes); } return BMI_SUCCESS; }
list_element * _list_back (list_head * list) { return list ? (list_element *) get_value_ptr (list->last) : 0; }
list_element * _list_front (list_head * list) { return list ? (list_element *) get_value_ptr (list->first) : 0; }