Esempio n. 1
0
gapi_returnCode_t
gapi_dataReader_delete_readcondition (
    gapi_dataReader _this,
    const gapi_readCondition a_condition)
{
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    _DataReader datareader;
    _ReadCondition readCondition = NULL;
    c_bool contains;

    if (_this && a_condition) {
        datareader = gapi_dataReaderClaim(_this, &result);
        if (datareader != NULL) {
            readCondition = gapi_readConditionClaim(a_condition, NULL);
            if (readCondition != NULL ) {
                contains = u_readerContainsQuery(U_READER_GET(datareader),
                                                 U_QUERY_GET(readCondition));
                if (contains) {
                    _ReadConditionFree(readCondition);
                } else {
                    result = GAPI_RETCODE_PRECONDITION_NOT_MET;
                    _EntityRelease(readCondition);
                }
            } else {
                result = GAPI_RETCODE_ALREADY_DELETED;
            }
            _EntityRelease(datareader);
        } else {
            result = GAPI_RETCODE_ALREADY_DELETED;
        }
    } else {
        result = GAPI_RETCODE_BAD_PARAMETER;
    }
    return result;
}
Esempio n. 2
0
gapi_boolean
_DataReaderPrepareDelete (
    _DataReader   _this,
    gapi_context *context)
{
    gapi_boolean result = TRUE;

    assert(_this);

    if (u_readerQueryCount(U_READER_GET(_this)) > 0) {
        gapi_errorReport(context, GAPI_ERRORCODE_CONTAINS_CONDITIONS);
        result = FALSE;
    }

    if (u_dataReaderViewCount(U_DATAREADER_GET(_this)) > 0) {
        gapi_errorReport(context, GAPI_ERRORCODE_CONTAINS_ENTITIES);
        result = FALSE;
    }

    if ( !gapi_loanRegistry_is_empty(_this->loanRegistry) ) {
        gapi_errorReport(context, GAPI_ERRORCODE_CONTAINS_LOANS);
        result = FALSE;
    }

    return result;
}
Esempio n. 3
0
/*     ReturnCode_t
 *     delete_contained_entities();
 */
gapi_returnCode_t
gapi_dataReaderView_delete_contained_entities (
    gapi_dataReaderView _this)
{
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    _DataReaderView datareaderview;
    gapi_context context;
    _Condition condition = NULL;
    c_iter entities;
    u_entity e;
    u_result ur;

    GAPI_CONTEXT_SET(context, _this, GAPI_METHOD_DELETE_CONTAINED_ENTITIES);

    if ( _this != NULL ) {
        datareaderview = gapi_dataReaderViewClaim(_this, &result);
        if ( datareaderview != NULL ) {
            if (!gapi_loanRegistry_is_empty(datareaderview->loanRegistry)) {
                result = GAPI_RETCODE_PRECONDITION_NOT_MET;
            } else {
                entities = u_readerLookupQueries(U_READER_GET(datareaderview));
                e = c_iterTakeFirst(entities);
                while (e) {
                    condition = u_entityGetUserData(e);
                    if (condition) {
                        _ObjectReadClaimNotBusy(_Object(condition));
                        _ConditionFree(condition);
                    } else {
                        if (e == u_entity(datareaderview->uQuery)) {
                            datareaderview->uQuery = NULL;
                            ur = u_queryFree(u_query(e));
                            if (ur == U_RESULT_OK) {
                                result = GAPI_RETCODE_OK;
                            } else {
                                result = GAPI_RETCODE_BAD_PARAMETER;
                            }
                        } else {
                            assert(condition);
                            result = GAPI_RETCODE_BAD_PARAMETER;
                        }
                    }
                    e = c_iterTakeFirst(entities);
                }
                c_iterFree(entities);
            }
            _EntityRelease(datareaderview);
        } else {
            result = GAPI_RETCODE_ALREADY_DELETED;
        }
    } else {
        result = GAPI_RETCODE_BAD_PARAMETER;
    }

    return result;
}
Esempio n. 4
0
static gapi_returnCode_t
_DataReader_set_notread_threshold (
    _DataReader _this,
    gapi_long threshold)
{
    u_result uResult;
    uResult = u_dataReaderSetNotReadThreshold(
                  U_READER_GET(_this),
                  threshold);
    return kernelResultToApiResult(uResult);
}
Esempio n. 5
0
static gapi_returnCode_t
_DataReader_get_matched_publications (
    _DataReader _this,
    gapi_instanceHandleSeq *publication_handles)
{
    u_result uResult;
    uResult = u_readerGetMatchedPublications(
                  U_READER_GET(_this),
                  copy_matched_publication,
                  publication_handles);
    return kernelResultToApiResult(uResult);
}
Esempio n. 6
0
static gapi_returnCode_t
_DataReader_get_matched_publication_data (
    _DataReader _this,
    gapi_publicationBuiltinTopicData *publication_data,
    const gapi_instanceHandle_t publication_handle)
{
    u_result uResult;
    uResult = u_readerGetMatchedPublicationData(
                  U_READER_GET(_this),
                  publication_handle,
                  gapi_publicationBuiltinTopicData__copyOut,
                  publication_data);
    return kernelResultToApiResult(uResult);
}
Esempio n. 7
0
gapi_boolean
_DataReaderViewPrepareDelete (
    _DataReaderView dataReaderView,
    gapi_context *context)
{
    gapi_boolean result = TRUE;

    assert(dataReaderView);

    /* Note: one internal query always exists! */
    if ( u_readerQueryCount(U_READER_GET(dataReaderView)) > 1 ) {
        gapi_errorReport(context, GAPI_ERRORCODE_CONTAINS_CONDITIONS);
        result = FALSE;
    }
    
    if ( !gapi_loanRegistry_is_empty(dataReaderView->loanRegistry) ) {
        gapi_errorReport(context, GAPI_ERRORCODE_CONTAINS_LOANS);
        result = FALSE;
    }
    return result;
}
Esempio n. 8
0
gapi_returnCode_t
gapi_subscriber_delete_datareader (
    gapi_subscriber _this,
    const gapi_dataReader a_datareader)
{
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    _Subscriber subscriber;
    _DataReader datareader = NULL;
    gapi_context context;
    c_bool contains;

    GAPI_CONTEXT_SET(context, _this, GAPI_METHOD_DELETE_DATAREADER);

    subscriber = gapi_subscriberClaimNB(_this, &result);

    if ( subscriber ) {
        if ( !subscriber->builtin ) {
            datareader = gapi_dataReaderClaimNB(a_datareader, NULL);
            if ( datareader ) {
                contains = u_subscriberContainsReader(U_SUBSCRIBER_GET(subscriber),
                                                      U_READER_GET(datareader));
                if (contains) {
                    if ( _DataReaderPrepareDelete (datareader, &context) ) {
                        _DataReaderFree(datareader);
                        datareader = NULL;
                    } else {
                        result = GAPI_RETCODE_PRECONDITION_NOT_MET;
                    }
                } else {
                    result = GAPI_RETCODE_PRECONDITION_NOT_MET;
                }
                _EntityRelease(datareader);
            } else {
                result = GAPI_RETCODE_BAD_PARAMETER;
            }
        }
        _EntityRelease(subscriber);
    }
    return result;
}
Esempio n. 9
0
gapi_returnCode_t
gapi_dataReader_delete_contained_entities (
    gapi_dataReader _this)
{
    gapi_object handle;
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    _DataReader datareader;
    gapi_context context;
    _Condition condition = NULL;
    _DataReaderView view = NULL;
    c_iter entities;
    u_entity e;
    u_result ur;

    GAPI_CONTEXT_SET(context, _this, GAPI_METHOD_DELETE_CONTAINED_ENTITIES);

    datareader = gapi_dataReaderClaim(_this, &result);

    if ( datareader != NULL ) {
        if (!gapi_loanRegistry_is_empty(datareader->loanRegistry)) {
            result = GAPI_RETCODE_PRECONDITION_NOT_MET;
        } else {
            entities = u_readerLookupQueries(U_READER_GET(datareader));
            e = c_iterTakeFirst(entities);
            while (e) {
                condition = u_entityGetUserData(e);
                if (condition) {
                    _ObjectReadClaimNotBusy(_Object(condition));
                    _ConditionFree(condition);
                } else {
                    assert(condition);
                    result = GAPI_RETCODE_BAD_PARAMETER;
                }
                e = c_iterTakeFirst(entities);
            }
            c_iterFree(entities);

            entities = u_dataReaderLookupViews(U_DATAREADER_GET(datareader));
            e = c_iterTakeFirst(entities);
            while (e) {
                handle = u_entityGetUserData(e);
                view = _DataReaderView(gapi_conditionClaimNB(handle,&result));
                if (view) {
                    _DataReaderViewFree(view);
                } else {
                    ur = u_dataViewFree(u_dataView(e));
                    if (ur == U_RESULT_OK) {
                        result = GAPI_RETCODE_OK;
                    } else {
                        result = GAPI_RETCODE_BAD_PARAMETER;
                    }
                }
                e = c_iterTakeFirst(entities);
            }
            c_iterFree(entities);
        }
        _EntityRelease(datareader);
    } else {
        result = GAPI_RETCODE_BAD_PARAMETER;
    }
    return result;
}