Пример #1
0
static ib_status_t ibpp_transformation_translator(
    ib_mpool_t* mp,
    const ib_field_t* fin,
    const ib_field_t** fout,
    void *cbdata
)
{
    try {
        ConstTransformation::transformation_t transformation =
            data_to_value<ConstTransformation::transformation_t>(cbdata);

        ConstField result = transformation(MemoryPool(mp), ConstField(fin));

        *fout = result.ib();
    }
    catch (...) {
        return convert_exception();
    }

    return IB_OK;
}
Пример #2
0
ib_status_t cfgmap_set(
    void*       base,
    ib_field_t* field,
    void*       in_value,
    void*       cbdata
)
{
    assert(base != NULL);

    try {
        data_to_value<
            configuration_map_init_setter_translator_t
        >(cbdata)(
            base, field, in_value
        );
    }
    catch (...) {
        return convert_exception();
    }
    return IB_OK;
}
Пример #3
0
ib_status_t field_dynamic_set(
    ib_field_t* field,
    const void* arg,
    size_t      arg_length,
    void*       in_value,
    void*       cbdata
)
{
    const char* carg = reinterpret_cast<const char*>(arg);

    // No engine available.
    try {
        switch (field->type) {
            case IB_FTYPE_TIME:
                data_to_value<Field::time_set_t>(cbdata)(
                    Field(field),
                    carg, arg_length,
                    *reinterpret_cast<const uint64_t*>(in_value)
                );
                break;
            case IB_FTYPE_NUM:
                data_to_value<Field::number_set_t>(cbdata)(
                    Field(field),
                    carg, arg_length,
                    *reinterpret_cast<const int64_t*>(in_value)
                );
                break;
            case IB_FTYPE_FLOAT:
                data_to_value<Field::float_set_t>(cbdata)(
                    Field(field),
                    carg, arg_length,
                    *reinterpret_cast<const long double*>(in_value)
                );
                break;
            case IB_FTYPE_NULSTR:
                data_to_value<Field::null_string_set_t>(cbdata)(
                    Field(field),
                    carg, arg_length,
                    reinterpret_cast<const char*>(in_value)
                );
                break;
            case IB_FTYPE_BYTESTR: {
                // Const cast, but then immeidately store as const.
                const ConstByteString value(
                    reinterpret_cast<const ib_bytestr_t*>(in_value)
                );
                data_to_value<Field::byte_string_set_t>(cbdata)(
                    Field(field),
                    carg, arg_length,
                    value
                );
                break;
            }
            case IB_FTYPE_LIST: {
                const ib_list_t* value =
                    reinterpret_cast<const ib_list_t*>(in_value);
                data_to_value<
                    Internal::dynamic_list_setter_translator_t
                >(cbdata)(
                    Field(field),
                    carg, arg_length,
                    value
                );
                break;
            }
            default:
                BOOST_THROW_EXCEPTION(
                    einval() << errinfo_what(
                        "Unsupported field type: " + type_as_s(field->type)
                    )
                );
        }
    }
    catch (...) {
        return convert_exception();
    }
    return IB_OK;
}
Пример #4
0
ib_status_t field_dynamic_get(
    const ib_field_t* field,
    void*             out_val,
    const void*       arg,
    size_t            arg_length,
    void*             cbdata
)
{
    // We will only pass this as as a const reference.
    ConstField fieldpp(field);

    const char* carg = reinterpret_cast<const char*>(arg);

    // No engine available.
    ib_status_t rc = IB_OK;
    try {
        switch (field->type) {
            case IB_FTYPE_TIME: {
                ib_time_t* n = reinterpret_cast<ib_time_t*>(out_val);
                *n = data_to_value<Field::time_get_t>(cbdata)(
                    fieldpp, carg, arg_length
                );
                return IB_OK;
            }
            case IB_FTYPE_NUM: {
                ib_num_t* n = reinterpret_cast<ib_num_t*>(out_val);
                *n = data_to_value<Field::number_get_t>(cbdata)(
                    fieldpp, carg, arg_length
                );
                return IB_OK;
            }
            case IB_FTYPE_FLOAT: {
                ib_float_t* u = reinterpret_cast<ib_float_t*>(out_val);
                *u = data_to_value<
                    Field::float_get_t
                >(cbdata)(
                    fieldpp, carg, arg_length
                );
                return IB_OK;
            }
            case IB_FTYPE_NULSTR:
            {
                const char** ns = reinterpret_cast<const char**>(out_val);
                *ns = data_to_value<
                    Field::null_string_get_t
                >(cbdata)(
                    fieldpp, carg, arg_length
                );
                return IB_OK;
            }
            case IB_FTYPE_BYTESTR:
            {
                const ib_bytestr_t** bs
                    = reinterpret_cast<const ib_bytestr_t**>(out_val);
                *bs = data_to_value<
                    Field::byte_string_get_t
                >(cbdata)(
                    fieldpp, carg, arg_length
                ).ib();
                return IB_OK;
            }
            case IB_FTYPE_LIST:
            {
                const ib_list_t** l
                    = reinterpret_cast<const ib_list_t**>(out_val);
                *l = data_to_value<
                    Internal::dynamic_list_getter_translator_t
                >(cbdata)(
                    fieldpp, carg, arg_length
                );
                return IB_OK;
            }
            default:
                BOOST_THROW_EXCEPTION(
                    einval() << errinfo_what(
                        "Unsupported field type: " + type_as_s(field->type)
                    )
                );
        }
    }
    catch (...) {
        return convert_exception();
    }

    // If we got here, it is in error.
    assert(rc != IB_OK);
    return rc;
}