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; }
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; }
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; }
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; }