void v_dataViewSampleRemove( v_dataViewSample sample) { v_dataViewInstance instance; assert(C_TYPECHECK(sample,v_dataViewSample)); instance = v_dataViewInstance(v_readerSample(sample)->instance); CHECK_INSTANCE(instance); if (instance->sampleCount > 1) { if (sample->next != NULL) { v_dataViewSample(sample->next)->prev = sample->prev; } else { v_dataViewInstanceTemplate(instance)->sample = sample->prev; } if (sample->prev != NULL) { v_dataViewSample(sample->prev)->next = sample->next; } sample->prev = NULL; sample->next = NULL; c_free(sample); } instance->sampleCount--; if (instance->sampleCount > 0) { CHECK_INSTANCE(instance); } else { CHECK_ZERO_INSTANCE(instance); } }
void v_dataViewInstanceWipe( v_dataViewInstance instance) { v_dataViewSample sample,prev,firstSample; if (instance == NULL) { return; } assert (C_TYPECHECK (instance, v_dataViewInstance)); CHECK_INSTANCE(instance); if (instance->sampleCount != 0) { sample = v_dataViewInstanceTemplate(instance)->sample; firstSample = c_keep(sample); while (sample != NULL) { v_dataViewSampleListRemove(v_dataViewSampleList(sample)); prev = sample->prev; sample->prev = NULL; c_free(sample); sample = prev; } instance->sampleCount = 0; v_dataViewInstanceTemplate(instance)->sample = firstSample; } CHECK_ZERO_INSTANCE(instance); }
static c_bool v_dataViewInstanceTakeWithCondition( v_dataViewInstance instance, v_sampleCondition condition, c_voidp conditionArg, v_state sampleMask, v_readerSampleAction action, c_voidp actionArg) { v_dataViewSample sample, previous; c_bool proceed = TRUE; c_bool sampleSatisfies = FALSE; assert(C_TYPECHECK(instance,v_dataViewInstance)); CHECK_INSTANCE(instance); if (instance == NULL) { return proceed; } if (instance->sampleCount == 0) { return proceed; } sample = v_dataViewInstanceTemplate(instance)->sample; assert (sample != NULL); while (proceed == TRUE && sample != NULL) { if (v_sampleMaskPass(sampleMask, sample)) { if (condition != NULL) { sampleSatisfies = condition(sample, conditionArg); } else { sampleSatisfies = TRUE; } } previous = sample->prev; if (sampleSatisfies) { proceed = v_actionResultTest(v_dataViewSampleReadTake(sample, action, actionArg, TRUE), V_PROCEED); } sample = previous; } if (instance->sampleCount > 0) { CHECK_INSTANCE(instance); } else { CHECK_ZERO_INSTANCE(instance); } return proceed; }
void v_dataViewInstanceRemove( v_dataViewInstance instance) { v_dataViewInstance found; assert(C_TYPECHECK(instance,v_dataViewInstance)); if (instance->sampleCount == 0) { CHECK_ZERO_INSTANCE(instance); found = c_remove(v_dataView(instance->dataView)->instances,instance,NULL,NULL); assert(found == instance); instance->dataView = NULL; v_publicFree(v_public(instance)); c_free(instance); } else { CHECK_INSTANCE(instance); } }
void v_dataViewInstanceRemove( v_dataViewInstance instance) { v_dataView dataView; v_dataViewInstance found; assert(C_TYPECHECK(instance,v_dataViewInstance)); if (instance->sampleCount == 0) { CHECK_ZERO_INSTANCE(instance); if (v_objectKind (instance) == K_DATAVIEWINSTANCE) { dataView = v_dataView(v_instanceEntity(instance)); found = c_remove(dataView->instances,instance,NULL,NULL); assert(found == instance); OS_UNUSED_ARG(found); v_publicFree(v_public(instance)); c_free(instance); } } else { CHECK_INSTANCE(instance); } }