_DataReaderView _DataReaderViewNew ( const gapi_dataReaderViewQos * qos, const _DataReader datareader) { _DataReaderView _this; v_dataViewQos ViewQos; u_dataView uReaderView; _TypeSupport typeSupport; _this = _DataReaderViewAlloc(); if ( _this != NULL ) { _EntityInit(_Entity(_this), _Entity(datareader)); typeSupport = _TopicDescriptionGetTypeSupport(datareader->topicDescription); assert(typeSupport); _this->datareader = datareader; ViewQos = u_dataViewQosNew(NULL); if ( ViewQos != NULL ) { if ( !copyReaderViewQosIn(qos, ViewQos) ) { u_dataViewQosFree(ViewQos); _EntityDispose(_Entity(_this)); _this = NULL; } } else { _EntityDispose(_Entity(_this)); _this = NULL; } } if ( _this != NULL ) { uReaderView = u_dataViewNew(u_dataReader(_EntityUEntity (datareader)), "dataReaderView", ViewQos); if ( uReaderView ) { U_DATAREADERVIEW_SET(_this, uReaderView); } else { _EntityDispose(_Entity(_this)); _this = NULL; } u_dataViewQosFree(ViewQos); } if ( _this != NULL ) { if ( !initViewQuery(_this) ) { u_dataViewFree(uReaderView); _EntityDispose(_Entity(_this)); _this = NULL; } } if ( _this != NULL ) { _EntityStatus(_this) = _Entity(datareader)->status; } return _this; }
/************************************************************** * constructor/destructor **************************************************************/ v_dataViewQos u_dataViewQosNew( v_dataViewQos tmpl) { v_dataViewQos q; u_result result; int len; q = os_malloc(sizeof(C_STRUCT(v_dataViewQos))); if (q != NULL) { if (tmpl != NULL) { /* Copy non-reference fields */ *q = *tmpl; /* Copy reference fields */ if (tmpl->userKey.enable){ if (tmpl->userKey.expression != NULL) { len = strlen(tmpl->userKey.expression); q->userKey.expression = os_malloc(len+1); os_strncpy(q->userKey.expression, tmpl->userKey.expression, len); q->userKey.expression[len] = 0; } else { q->userKey.expression = NULL; } } } else { result = u_dataViewQosInit(q); if (result != U_RESULT_OK) { u_dataViewQosFree(q); q = NULL; } } } return q; }
/* ReturnCode_t * set_qos( * in DataReaderViewQos qos); * * Function will operate indepenedent of the enable flag */ gapi_returnCode_t gapi_dataReaderView_set_qos ( gapi_dataReaderView _this, const gapi_dataReaderViewQos *qos) { gapi_returnCode_t result = GAPI_RETCODE_OK; u_result uResult; _DataReaderView dataReaderView; v_dataViewQos dataReaderViewQos; gapi_context context; GAPI_CONTEXT_SET(context, _this, GAPI_METHOD_SET_QOS); dataReaderView = gapi_dataReaderViewClaim(_this, &result); if (dataReaderView != NULL) { if ( dataReaderView && qos) { result = gapi_dataReaderViewQosIsConsistent(qos, &context); } else { result = GAPI_RETCODE_BAD_PARAMETER; } if ( result == GAPI_RETCODE_OK ) { gapi_dataReaderViewQos * existing_qos = gapi_dataReaderViewQos__alloc(); result = gapi_dataReaderViewQosCheckMutability(qos, _DataReaderViewGetQos(dataReaderView, existing_qos), &context); gapi_free(existing_qos); } if ( result == GAPI_RETCODE_OK ) { dataReaderViewQos = u_dataViewQosNew(NULL); if (dataReaderViewQos) { if ( copyReaderViewQosIn(qos, dataReaderViewQos) ) { uResult = u_entitySetQoS(_EntityUEntity(dataReaderView),(v_qos)(dataReaderViewQos) ); result = kernelResultToApiResult(uResult); } else { result = GAPI_RETCODE_OUT_OF_RESOURCES; } u_dataViewQosFree(dataReaderViewQos); } else { result = GAPI_RETCODE_OUT_OF_RESOURCES; } } _EntityRelease(dataReaderView); } return result; }
DDS::ReturnCode_t DDS::OpenSplice::DataReaderView::nlReq_init ( DDS::OpenSplice::DataReader *reader, const char *name, const DDS::DataReaderViewQos &qos) { DDS::ReturnCode_t result; u_dataViewQos uQos = NULL; u_dataView uView = NULL; assert (reader != NULL); assert (name != NULL); /* qos consistency already checked in create_view */ assert (DDS::OpenSplice::Utils::qosIsConsistent(qos) == DDS::RETCODE_OK); uQos = u_dataViewQosNew(NULL); if (uQos) { result = DDS::OpenSplice::Utils::copyQosIn(qos, uQos); if (result == DDS::RETCODE_OK) { uView = u_dataViewNew( u_dataReader(reader->rlReq_get_user_entity()), name, uQos); if (uView) { result = DDS::OpenSplice::Entity::nlReq_init (u_entity (uView)); if (result == DDS::RETCODE_OK) { (void) DDS::DataReader::_duplicate(reader); this->pimpl->reader = reader; setDomainId(reader->getDomainId()); } if (result == DDS::RETCODE_OK) { result = this->pimpl->conditions->init(); } } else { result = DDS::RETCODE_OUT_OF_RESOURCES; CPP_REPORT(result, "Could not create DataReaderView."); } } u_dataViewQosFree(uQos); } else { result = DDS::RETCODE_OUT_OF_RESOURCES; CPP_REPORT(result, "Could not copy DataReaderViewQos."); } return result; }
gapi_dataReaderViewQos * _DataReaderViewGetQos ( _DataReaderView dataReaderView, gapi_dataReaderViewQos * qos) { v_dataViewQos dataViewQos; u_dataView uDataView; assert(dataReaderView); uDataView = u_dataView(U_DATAREADERVIEW_GET(dataReaderView)); if ( u_entityQoS(u_entity(uDataView), (v_qos*)&dataViewQos) == U_RESULT_OK ) { copyReaderViewQosOut(dataViewQos, qos); u_dataViewQosFree(dataViewQos); } return qos; }