29 struct xmmsv_coll_St {
41 size_t idlist_allocated;
48 static int xmmsv_coll_idlist_resize (
xmmsv_coll_t *coll,
size_t newsize);
95 if (!(coll->idlist =
x_new0 (uint32_t, 1))) {
100 coll->idlist_size = 1;
101 coll->idlist_allocated = 1;
150 x_api_error_if (coll->ref < 1,
"with a freed collection",);
153 if (coll->ref == 0) {
154 xmmsv_coll_free (coll);
171 unsigned int size = 0;
175 while (ids[size] != 0) {
181 if (!(coll->idlist =
x_new0 (uint32_t, size))) {
186 for (i = 0; i < size; ++i) {
187 coll->idlist[i] = ids[i];
190 coll->idlist_size = size;
191 coll->idlist_allocated = size;
229 if (_xmmsv_coll_operand_find (it, op)) {
230 x_api_warning (
"with an operand already in operand list");
259 if (_xmmsv_coll_operand_find (it, op)) {
262 x_api_warning (
"with an operand not in operand list");
295 if (index >= coll->idlist_size) {
300 if (coll->idlist_size == coll->idlist_allocated) {
302 size_t double_size = coll->idlist_allocated * 2;
303 success = xmmsv_coll_idlist_resize (coll, double_size);
307 for (i = coll->idlist_size; i > index; i--) {
308 coll->idlist[i] = coll->idlist[i - 1];
311 coll->idlist[index] = id;
332 if ((index >= coll->idlist_size - 1) || (newindex >= coll->idlist_size - 1)) {
336 tmp = coll->idlist[index];
337 if (index < newindex) {
338 for (i = index; i < newindex; i++) {
339 coll->idlist[i] = coll->idlist[i + 1];
342 else if (index > newindex) {
343 for (i = index; i > newindex; i--) {
344 coll->idlist[i] = coll->idlist[i - 1];
347 coll->idlist[newindex] = tmp;
366 if (index >= coll->idlist_size - 1) {
371 for (i = index; i < coll->idlist_size; i++) {
372 coll->idlist[i] = coll->idlist[i + 1];
376 half_size = coll->idlist_allocated / 2;
377 if (coll->idlist_size <= half_size) {
378 xmmsv_coll_idlist_resize (coll, half_size);
392 unsigned int empty[] = { 0 };
413 if (index >= (coll->idlist_size - 1)) {
417 *val = coll->idlist[index];
434 if (index >= (coll->idlist_size - 1)) {
438 coll->idlist[index] = val;
453 return coll->idlist_size - 1;
493 return coll->operands;
501 return coll->attributes;
561 struct attr_fe_data {
567 attr_fe_func (
const char *key,
xmmsv_t *val,
void *user_data)
569 struct attr_fe_data *d = user_data;
576 d->func (key, v, d->userdata);
594 struct attr_fe_data d = {func, user_data};
624 xmmsv_coll_idlist_resize (
xmmsv_coll_t *coll,
size_t newsize)
628 newmem = realloc (coll->idlist, newsize * sizeof (uint32_t));
630 if (newmem == NULL) {
635 coll->idlist = newmem;
636 coll->idlist_allocated = newsize;