Ejemplo n.º 1
0
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);
    }
}
Ejemplo n.º 2
0
v_dataViewSample
v_dataViewSampleNew(
    v_dataViewInstance instance,
    v_readerSample masterSample)
{
    v_dataView dataView;
    v_dataViewSample sample;

    assert(instance != NULL);
    assert(masterSample != NULL);
    assert(C_TYPECHECK(masterSample,v_readerSample));

    dataView = v_dataView(instance->dataView);
#ifdef _EXTENT_
    sample = v_dataViewSample(c_extentCreate(dataView->sampleExtent));
#else
    sample = v_dataViewSample(c_new(dataView->sampleType));
#endif
    if (sample) {
        v_readerSample(sample)->instance = (c_voidp)instance;
        v_readerSample(sample)->sampleState = 0;
        v_dataViewSampleList(sample)->next = NULL;
        v_dataViewSampleList(sample)->prev = NULL;
        sample->prev = NULL;
        v_dataViewSampleTemplate(sample)->sample = c_keep(masterSample);
    } else {
        OS_REPORT(OS_ERROR,
                  "v_dataViewSampleNew",0,
                  "Failed to allocate v_dataViewSample.");
    }
    return sample;
}
Ejemplo n.º 3
0
void
v_dataViewInstanceWrite(
    v_dataViewInstance instance,
    v_dataViewSample sample,
    v_dataViewSample position)
{
    v_dataViewSample head, *sampleptr;

    assert (instance != NULL && C_TYPECHECK (instance, v_dataViewInstance));
    assert (sample != NULL && C_TYPECHECK (sample, v_dataViewSample));
    if (position != NULL) {
        assert (C_TYPECHECK (position, v_dataViewSample));
    }

    head = v_dataViewInstanceTemplate(instance)->sample;
    /* Keep alive view sample must be discarded, but only after the new
     * view sample is inserted.
     */
    if (instance->sampleCount == 0) {
        assert (position == NULL);
        assert(head == NULL);
        sampleptr = &v_dataViewInstanceTemplate(instance)->sample;
        sample->next = sample;
        sample->prev = NULL;
        (*sampleptr) = sample;

    } else if (position == NULL) {
        assert(head);
        /* "normal" use case, append sample to list */
        sampleptr = (v_dataViewSample *)&head->next;
        sample->next = (*sampleptr);
        sample->prev = NULL;
        (*sampleptr)->prev = sample;
        (*sampleptr) = sample;

    } else {
        assert (position->next != NULL);
        assert(head);
        sample->next = position->next;
        if (position == head) {
            sampleptr = &v_dataViewInstanceTemplate(instance)->sample;
            /* verify previous pointer of tail sample is correct */
            assert (v_dataViewSample(head->next)->prev == NULL);
            (*sampleptr)->next = sample;
        } else {
            sampleptr = (v_dataViewSample *)&position->next;
            (*sampleptr)->prev = sample;
        }
        sample->prev = position;
        (*sampleptr) = sample;
    }
    instance->sampleCount++;
}
Ejemplo n.º 4
0
void
v_dataReaderSampleEmptyViews(
    v_dataReaderSample sample)
{
    v_dataViewSampleList viewSample;

    assert(sample != NULL);
    assert(C_TYPECHECK(sample, v_dataReaderSample));

    viewSample = v_readerSample(sample)->viewSamples;
    while (viewSample != NULL) {
        v_dataViewSampleListRemove(viewSample);
        v_dataViewSampleRemove(v_dataViewSample(viewSample));
        viewSample = v_readerSample(sample)->viewSamples;
    }
}
Ejemplo n.º 5
0
void
v_dataReaderSampleWipeViews(
    v_dataReaderSample sample)
{
    v_dataViewSampleList viewSample;
    v_dataViewInstance instance;

    assert(sample != NULL);
    assert(C_TYPECHECK(sample, v_dataReaderSample));

    viewSample = v_readerSample(sample)->viewSamples;
    while (viewSample != NULL) {
        instance = v_readerSample(viewSample)->instance;
        v_dataViewSampleListRemove(viewSample);
        v_dataViewSampleRemove(v_dataViewSample(viewSample));
        v_dataViewInstanceRemove(instance);
        viewSample = v_readerSample(sample)->viewSamples;
    }
}