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; }
static void copySampleInfoView ( v_readerSample sample, v_message message, gapi_sampleInfo *to ) { v_state state; v_dataReaderSample master; v_dataViewInstance viewInstance; v_dataReaderInstance masterInstance; viewInstance = (v_dataViewInstance)sample->instance; master = v_dataReaderSample(v_dataViewSampleTemplate(sample)->sample); masterInstance = (v_dataReaderInstance)v_readerSampleInstance(master); state = v_readerSample(sample)->sampleState; if (v_stateTest (state, L_READ)) { to->sample_state = GAPI_READ_SAMPLE_STATE; } else { to->sample_state = GAPI_NOT_READ_SAMPLE_STATE; } if (v_stateTest (state, L_NEW)) { to->view_state = GAPI_NEW_VIEW_STATE; } else { to->view_state = GAPI_NOT_NEW_VIEW_STATE; } state = masterInstance->instanceState; to->instance_state = GAPI_ALIVE_INSTANCE_STATE; if (v_stateTest (state, L_NOWRITERS)) { to->instance_state = GAPI_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE; } if (v_stateTest (state, L_DISPOSED)) { to->instance_state = GAPI_NOT_ALIVE_DISPOSED_INSTANCE_STATE; } /* Data is always valid for views */ to->valid_data = TRUE; to->source_timestamp.sec = (gapi_long)(message->writeTime.seconds); to->source_timestamp.nanosec = (gapi_unsigned_long)(message->writeTime.nanoseconds); to->disposed_generation_count = master->disposeCount; to->no_writers_generation_count = master->noWritersCount; to->sample_rank = 0; to->generation_rank = 0; to->absolute_generation_rank = 0; to->instance_handle = u_instanceHandleNew(v_public(viewInstance)); to->publication_handle = u_instanceHandleFromGID(master->publicationHandle); to->reception_timestamp.sec = (gapi_long)(master->insertTime.seconds); to->reception_timestamp.nanosec = (gapi_unsigned_long)(master->insertTime.nanoseconds); }
void v_dataViewSampleListRemove( v_dataViewSampleList sample) { assert(C_TYPECHECK(sample,v_dataViewSampleList)); assert(v_dataViewInstance(v_readerSample(sample)->instance)->sampleCount > 0); CHECK_INSTANCE(v_dataViewInstance(v_readerSample(sample)->instance)); if (sample->next != NULL) { v_dataViewSampleList(sample->next)->prev = sample->prev; } if (sample->prev != NULL) { v_dataViewSampleList(sample->prev)->next = sample->next; } else { assert(v_dataViewSampleTemplate(sample)->sample->viewSamples == sample); v_dataViewSampleTemplate(sample)->sample->viewSamples = sample->next; } sample->prev = NULL; sample->next = NULL; CHECK_INSTANCE(v_dataViewInstance(v_readerSample(sample)->instance)); }
static void checkSample( v_dataViewSample sample) { if (((v_dataViewInstance)(((v_readerSample)sample)->instance))->sampleCount != 0) { v_readerSample readerSample = (v_readerSample)(v_dataViewSampleTemplate(sample)->sample); v_dataViewSampleList sampleList = (v_dataViewSampleList)(sample); REL_ASSERT(c_refCount(readerSample) > 0); REL_ASSERT(C_TYPECHECK(readerSample, v_readerSample)); REL_ASSERT(c_refCount(sampleList) > 0); if (sampleList->prev == NULL) { REL_ASSERT(readerSample->viewSamples == sample); } else { REL_ASSERT(readerSample->viewSamples != sample); } } }
static void determineSampleInfoView ( readerViewActionArg *info) { gapi_unsigned_long i; v_readerSampleSeq *samples = info->samples; gapi_unsigned_long length; gapi_dataSampleSeq dataSamples; gapi_dataSample onePlaceBuffer; gapi_boolean onHeap = FALSE; gapi_boolean onStack = FALSE; assert(samples->_length > 0); length = samples->_length; if ( length == 1 ) { dataSamples._buffer = &onePlaceBuffer; } else if ( length < MAX_DATASAMPLESEQ_SIZE_ON_STACK ) { dataSamples._buffer = (gapi_dataSample *)os_alloca(length*sizeof(gapi_dataSample)); if ( dataSamples._buffer ) { onStack = TRUE; } else { dataSamples._buffer = (gapi_dataSample *)os_malloc(length*sizeof(gapi_dataSample)); onHeap = TRUE; } } else { dataSamples._buffer = (gapi_dataSample *)os_malloc(length*sizeof(gapi_dataSample)); onHeap = TRUE; } if ( dataSamples._buffer ) { dataSamples._length = length; dataSamples._maximum = length; dataSamples._release = FALSE; for ( i = 0; i < length; i++ ) { v_dataViewSampleTemplate viewSample = v_dataViewSampleTemplate(samples->_buffer[i]); v_dataReaderSampleTemplate sample = v_dataReaderSampleTemplate(viewSample->sample); v_message message = sample->message; dataSamples._buffer[i].data = (void *)C_DISPLACE(message, info->datareaderview->datareader->userdataOffset); copySampleInfoView(v_readerSample(viewSample), message, &dataSamples._buffer[i].info); } computeGenerationRanksView(samples, &dataSamples); info->readerCopy(&dataSamples, info->readerInfo); if ( onStack ) { os_freea(dataSamples._buffer); } else { if ( onHeap ) { os_free(dataSamples._buffer); } } } else { info->result = GAPI_RETCODE_OUT_OF_RESOURCES; } }