X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fscheme%2Fao_scheme_poly.c;h=0bb427b96b6bca570afbd1be41a81839c0ea638b;hb=4bfce37e7567d9c2a09ea4da8113e7639516ed6e;hp=d726321ce2f9e0ddafd95ceec0a14b1b5f15200a;hpb=2f8fce1cf6ce4bd12a836cc8ee15f4edbc95c95e;p=fw%2Faltos diff --git a/src/scheme/ao_scheme_poly.c b/src/scheme/ao_scheme_poly.c index d726321c..0bb427b9 100644 --- a/src/scheme/ao_scheme_poly.c +++ b/src/scheme/ao_scheme_poly.c @@ -60,14 +60,33 @@ static const struct ao_scheme_funcs ao_scheme_funcs[AO_SCHEME_NUM_TYPE] = { .write = ao_scheme_bool_write, .display = ao_scheme_bool_write, }, +#ifdef AO_SCHEME_FEATURE_BIGINT [AO_SCHEME_BIGINT] = { .write = ao_scheme_bigint_write, .display = ao_scheme_bigint_write, }, +#endif +#ifdef AO_SCHEME_FEATURE_FLOAT [AO_SCHEME_FLOAT] = { .write = ao_scheme_float_write, .display = ao_scheme_float_write, }, +#endif +#ifdef AO_SCHEME_FEATURE_VECTOR + [AO_SCHEME_VECTOR] = { + .write = ao_scheme_vector_write, + .display = ao_scheme_vector_display + }, +#endif +}; + +static void ao_scheme_invalid_write(ao_poly p) { + printf("??? 0x%04x ???", p); +} + +static const struct ao_scheme_funcs ao_scheme_invalid_funcs = { + .write = ao_scheme_invalid_write, + .display = ao_scheme_invalid_write, }; static const struct ao_scheme_funcs * @@ -77,25 +96,17 @@ funcs(ao_poly p) if (type < AO_SCHEME_NUM_TYPE) return &ao_scheme_funcs[type]; - return NULL; + return &ao_scheme_invalid_funcs; } -void -ao_scheme_poly_write(ao_poly p) +void (*ao_scheme_poly_write_func(ao_poly p))(ao_poly p) { - const struct ao_scheme_funcs *f = funcs(p); - - if (f && f->write) - f->write(p); + return funcs(p)->write; } -void -ao_scheme_poly_display(ao_poly p) +void (*ao_scheme_poly_display_func(ao_poly p))(ao_poly p) { - const struct ao_scheme_funcs *f = funcs(p); - - if (f && f->display) - f->display(p); + return funcs(p)->display; } void *