예제 #1
0
gapi_returnCode_t
gapi_publisher_delete_contained_entities (
    gapi_publisher _this)
{
    _Publisher publisher;
    _DataWriter dataWriter;
    gapi_dataWriter handle;
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    c_iter writers;
    u_writer w;
    void *userData;

    publisher  = gapi_publisherClaim(_this, &result);

    if ( publisher != NULL ) {
        /* delete all datawriters in the datawriterSet */
        writers = u_publisherLookupWriters(U_PUBLISHER_GET(publisher),NULL);

        w = c_iterTakeFirst(writers);
        while (w) {
            handle = u_entityGetUserData(u_entity(w));
            dataWriter = gapi_dataWriterClaimNB(handle,&result);
            if (dataWriter) {
                userData = _ObjectGetUserData(_Object(dataWriter));
                _DataWriterFree(dataWriter);
            }
            w = c_iterTakeFirst(writers);
        }
        c_iterFree(writers);
        _EntityRelease(publisher);
    } else {
        result = GAPI_RETCODE_BAD_PARAMETER;
    }
    return result;
}
예제 #2
0
gapi_dataReader
gapi_subscriber_lookup_datareader (
    gapi_subscriber _this,
    const gapi_char *topic_name)
{
    _Subscriber subscriber;
    gapi_dataReader handle = NULL;
    u_dataReader found;
    c_iter iter;

    subscriber = gapi_subscriberClaim(_this, NULL);

    if (subscriber) {
        iter = u_subscriberLookupReaders(U_SUBSCRIBER_GET(subscriber),
                                         topic_name);
        if (iter) {
            found = c_iterTakeFirst(iter);
            if (found) {
                handle = u_entityGetUserData(u_entity(found));
            }
            c_iterFree(iter);
        }
        _EntityRelease(subscriber);
    }
    return handle;
}
예제 #3
0
gapi_dataWriter
gapi_publisher_lookup_datawriter (
    gapi_publisher _this,
    const gapi_char *topic_name)
{
    _Publisher publisher;
    u_writer found;
    gapi_dataWriter handle = NULL;
    c_iter iter;

    if (topic_name) {
        publisher  = gapi_publisherClaim(_this, NULL);
        if (publisher) {
            iter = u_publisherLookupWriters(U_PUBLISHER_GET(publisher), topic_name);
            if (iter) {
                found = c_iterTakeFirst(iter);
                if (found) {
                    handle = u_entityGetUserData(u_entity(found));
                }
                c_iterFree(iter);
            }
            _EntityRelease(publisher);
        }
    }

    return handle;
}
예제 #4
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;
}
예제 #5
0
gapi_subscriber
gapi_dataReader_get_subscriber (
    gapi_dataReader _this)
{
    gapi_subscriber subscriber = NULL;
    _DataReader datareader;
    u_subscriber uSubscriber;

    datareader = gapi_dataReaderClaim(_this, NULL);
    if ( datareader != NULL ) {
        uSubscriber = u_dataReaderSubscriber(U_DATAREADER_GET(datareader));
        subscriber = u_entityGetUserData(u_entity(uSubscriber));
        _EntityRelease(datareader);
    }
    return subscriber;
}
예제 #6
0
/*     Publisher
 *     get_publisher();
 */
gapi_publisher
gapi_dataWriter_get_publisher (
    gapi_dataWriter _this)
{
    _DataWriter datawriter;
    gapi_publisher publisher = NULL;
    u_publisher uPublisher;

    datawriter = gapi_dataWriterClaim(_this, NULL);

    if ( datawriter != NULL ) {
        uPublisher = u_writerPublisher(U_WRITER_GET(datawriter));
        publisher = u_entityGetUserData(u_entity(uPublisher));
        _EntityRelease(datawriter);
    }
    return publisher;
}
예제 #7
0
static c_bool
trigger_reader(
    u_dataReader reader,
    c_voidp arg)
{
    gapi_dataReader handle;
    _DataReader dataReader;

    assert(reader);

    handle = u_entityGetUserData(u_entity(reader));
    dataReader = gapi_dataReaderClaim(handle,NULL);
    if (dataReader) {
        _DataReaderTriggerNotify(dataReader);
        _EntityRelease(dataReader);
    }
    return TRUE;
}
예제 #8
0
static c_bool
check_handle(
    u_writer writer,
    struct check_handle_arg *arg)
{
    gapi_object handle;
    _Entity e;

    assert(writer);
    assert(arg);

    if (!arg->result) {
        handle = u_entityGetUserData(u_entity(writer));
        e = _Entity(gapi_objectPeekUnchecked(handle));
        if (e) {
            arg->result = _EntityHandleEqual(e,arg->handle);
        }
    }
    return !arg->result;
}
예제 #9
0
gapi_returnCode_t
_SubscriberDeleteContainedEntities (
    _Subscriber _this)
{
    gapi_dataReader handle;
    gapi_returnCode_t result = GAPI_RETCODE_OK;
    _DataReader dataReader;
    c_iter readers;
    u_dataReader r;
    gapi_context context;

    GAPI_CONTEXT_SET(context, _EntityHandle(_this), GAPI_METHOD_DELETE_CONTAINED_ENTITIES);

    if ( _this ) {
        readers = u_subscriberLookupReaders(U_SUBSCRIBER_GET(_this),NULL);

        r = c_iterTakeFirst(readers);
        while (r) {
            handle = u_entityGetUserData(u_entity(r));
            result = gapi_dataReader_delete_contained_entities(handle);
            if (result == GAPI_RETCODE_OK) {
                dataReader = gapi_dataReaderClaimNB(handle,&result);
                if (dataReader) {
                    if ( _DataReaderPrepareDelete(dataReader, &context) ) {
                        _DataReaderFree(dataReader);
                    } else if (result == GAPI_RETCODE_OK) {
                        result = GAPI_RETCODE_PRECONDITION_NOT_MET;
                    }
                }
            } else if (result == GAPI_RETCODE_ALREADY_DELETED) {
                result = GAPI_RETCODE_OK;
            }
            r = c_iterTakeFirst(readers);
        }
        c_iterFree(readers);
    }
    return result;
}
예제 #10
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;
}