CDList * cd_list_add_after (void * ctx, CDList * list, CDScalarType type, CDScalar data, CDScalar after) { CDList * a = cd_list_find (ctx, list, type, after); return cd_list_add_after_item (ctx, list, data, a); }
CDList * cd_list_add_before (void * ctx, CDList * list, CDScalarType type, CDScalar data, CDScalar before) { CDList * b = cd_list_find (ctx, list, type, before); return cd_list_add_before_item (ctx, list, data, b); }
CDList * cd_list_remove (void * ctx, CDList * list, CDScalarType type, CDScalar data) { CDList * l = cd_list_find (ctx, list, type, data); if (l == NULL) return list; if (l->prev) l->prev->next = l->next; if (l->next) l->next->prev = l->prev; if (l == list) return list->next; else return list; }
/* * gets layer below 'below'. If below is RemixNone, returns lowest layer */ RemixLayer * _remix_track_get_layer_below (RemixEnv * env, RemixTrack * track, RemixLayer * below) { CDList * below_item; RemixLayer * layer; if (track->layers == NULL) return RemixNone; if (below == RemixNone) { layer = (RemixLayer *) track->layers->data.s_pointer; } else { below_item = cd_list_find (env, track->layers, CD_TYPE_POINTER, CD_POINTER(below)); if (below_item == NULL) return RemixNone; below_item = below_item->prev; if (below_item == NULL) return RemixNone; layer = (RemixLayer *) below_item->data.s_pointer; } return layer; }
/* * gets layer above 'above'. If above is RemixNone, returns topmost layer */ RemixLayer * _remix_track_get_layer_above (RemixEnv * env, RemixTrack * track, RemixLayer * above) { CDList * above_item; RemixLayer * layer; if (track->layers == NULL) return RemixNone; if (above == RemixNone) { layer = (RemixLayer *) (cd_list_last (env, track->layers, CD_TYPE_POINTER)).s_pointer; } else { above_item = cd_list_find (env, track->layers, CD_TYPE_POINTER, CD_POINTER(above)); if (above_item == NULL) return RemixNone; above_item = above_item->next; if (above_item == NULL) return RemixNone; layer = (RemixLayer *) above_item->data.s_pointer; } return layer; }