From 11da511c784eca003deb90c23570f0873954e0de Mon Sep 17 00:00:00 2001 From: Duncan Wilkie Date: Sat, 18 Nov 2023 06:11:09 -0600 Subject: Initial commit. --- ic-reals-6.3/base/forceFuncLookupTable.c | 399 +++++++++++++++++++++++++++++++ 1 file changed, 399 insertions(+) create mode 100644 ic-reals-6.3/base/forceFuncLookupTable.c (limited to 'ic-reals-6.3/base/forceFuncLookupTable.c') diff --git a/ic-reals-6.3/base/forceFuncLookupTable.c b/ic-reals-6.3/base/forceFuncLookupTable.c new file mode 100644 index 0000000..7227d83 --- /dev/null +++ b/ic-reals-6.3/base/forceFuncLookupTable.c @@ -0,0 +1,399 @@ +/* + * Copyright (C) 2000, Imperial College + * + * This file is part of the Imperial College Exact Real Arithmetic Library. + * See the copyright notice included in the distribution for conditions + * of use. + */ + +#include +#include +#include "real.h" +#include "real-impl.h" + +/* + * For debugging purposes we keep a table which describes each force method. + * The table maps a pointer to a function to a descriptor which gives a + * printable string for the function name and the number of arguments + * expected by the function. + */ + +void delayCont(); +void force_Alt_Eval(); +void force_From_Bool_X_Only_Cont(); +void force_From_Bool_X_Only_Entry(); +void force_From_Bool_Y_Only_Cont(); +void force_From_Bool_Y_Only_Entry(); +void forceGtEqZero_To_PredX_From_Alt_Cont(); +void forceGtEqZero_To_PredX_From_Alt_Entry(); +void forceGtEqZero_To_PredX_From_Cls_Cont(); +void forceGtEqZero_To_PredX_From_Cls_Entry(); +void forceGtEqZero_To_PredX_From_DigsX_SINF_Cont(); +void forceGtEqZero_To_PredX_From_DigsX_SINF_Entry(); +void forceGtEqZero_To_PredX_From_DigsX_SNEG_Cont(); +void forceGtEqZero_To_PredX_From_DigsX_SNEG_Entry(); +void forceGtEqZero_To_PredX_From_DigsX_SZERO_Cont(); +void forceGtEqZero_To_PredX_From_DigsX_SZERO_Entry(); +void forceGtEqZero_To_PredX_From_MatX_Cont(); +void forceGtEqZero_To_PredX_From_MatX_Entry(); +void forceGtEqZero_To_PredX_From_MatX_Signed_Cont(); +void forceGtEqZero_To_PredX_From_MatX_Signed_Entry(); +void forceGtEqZero_To_PredX_From_SignX_Cont(); +void forceGtEqZero_To_PredX_From_SignX_Entry(); +void forceGtEqZero_To_PredX_From_TenXY(); +void forceGtZero_To_PredX_From_Alt_Cont(); +void forceGtZero_To_PredX_From_Alt_Entry(); +void forceGtZero_To_PredX_From_Cls_Cont(); +void forceGtZero_To_PredX_From_Cls_Entry(); +void forceGtZero_To_PredX_From_DigsX_SPOS_Cont(); +void forceGtZero_To_PredX_From_DigsX_SPOS_Entry(); +void forceGtZero_To_PredX_From_DigsX_SZERO_Cont(); +void forceGtZero_To_PredX_From_DigsX_SZERO_Entry(); +void forceGtZero_To_PredX_From_MatX_Cont(); +void forceGtZero_To_PredX_From_MatX_Entry(); +void forceGtZero_To_PredX_From_MatX_Signed_Cont(); +void forceGtZero_To_PredX_From_MatX_Signed_Entry(); +void forceGtZero_To_PredX_From_SignX_Cont(); +void forceGtZero_To_PredX_From_SignX_Entry(); +void forceGtZero_To_PredX_From_TenXY(); +void force_To_Alt_Cont(); +void force_To_Alt_Entry(); +void force_To_Alt_From_The_Abyss(); +void force_To_Alt_Reduce(); +void force_To_And_From_Bool_X_Cont(); +void force_To_And_From_Bool_X_Entry(); +void force_To_And_From_Bool_Y_Cont(); +void force_To_And_From_Bool_Y_Entry(); +void force_To_Bool_From_The_Abyss(); +void force_To_DigsX_From_Alt_Cont(); +void force_To_DigsX_From_Alt_Entry(); +void force_To_DigsX_From_Cls_Cont(); +void force_To_DigsX_From_Cls_Entry(); +void force_To_DigsX_From_DigsX_Cont(); +void force_To_DigsX_From_DigsX_Entry(); +void force_To_DigsX_From_MatX_Cont(); +void force_To_DigsX_From_MatX_Entry(); +void force_To_DigsX_From_TenXY_Cont(); +void force_To_DigsX_From_TenXY_Cont_X(); +void force_To_DigsX_From_TenXY_Entry(); +void force_To_DigsX_From_Vec(); +void force_To_MatX_From_Alt_Cont(); +void force_To_MatX_From_Alt_Entry(); +void force_To_MatX_From_Alt_Signed_Cont(); +void force_To_MatX_From_Alt_Signed_Entry(); +void force_To_MatX_From_Cls_Cont(); +void force_To_MatX_From_Cls_Entry(); +void force_To_MatX_From_Cls_Signed_Cont(); +void force_To_MatX_From_Cls_Signed_Entry(); +void force_To_MatX_From_DigsX_Cont(); +void force_To_MatX_From_DigsX_Entry(); +void force_To_MatX_From_DigsX_Signed(); +void force_To_MatX_From_MatX(); +void force_To_MatX_From_MatX_Signed_Cont(); +void force_To_MatX_From_MatX_Signed_Entry(); +void force_To_MatX_From_SignX_Cont(); +void force_To_MatX_From_SignX_Entry(); +void force_To_MatX_From_TenXY(); +void force_To_MatX_From_TenXY_Signed_Cont(); +void force_To_MatX_From_TenXY_Signed_Cont_X(); +void force_To_MatX_From_TenXY_Signed_Entry(); +void force_To_MatX_From_Vec(); +void force_To_MatX_From_Vec_Signed(); +void force_To_Not_From_Bool_Cont(); +void force_To_Not_From_Bool_Entry(); +void force_To_Or_From_Bool_X_Cont(); +void force_To_Or_From_Bool_X_Entry(); +void force_To_Or_From_Bool_Y_Cont(); +void force_To_Or_From_Bool_Y_Entry(); +void force_To_PredX_From_DigsX_2n_minus_1_False_Cont(); +void force_To_PredX_From_DigsX_2n_minus_1_False_Entry(); +void force_To_PredX_From_DigsX_2n_minus_1_True_Cont(); +void force_To_PredX_From_DigsX_2n_minus_1_True_Entry(); +void force_To_PredX_From_DigsX_minus_2n_minus_1_False_Cont(); +void force_To_PredX_From_DigsX_minus_2n_minus_1_False_Entry(); +void force_To_PredX_From_DigsX_minus_2n_minus_1_True_Cont(); +void force_To_PredX_From_DigsX_minus_2n_minus_1_True_Entry(); +void force_To_PredX_From_The_Abyss(); +void force_To_SignX_From_Alt_Cont(); +void force_To_SignX_From_Alt_Entry(); +void force_To_SignX_From_Cls_Cont(); +void force_To_SignX_From_Cls_Entry(); +void force_To_SignX_From_DigsX(); +void force_To_SignX_From_MatX_Cont(); +void force_To_SignX_From_MatX_Entry(); +void force_To_SignX_From_TenXY_Cont(); +void force_To_SignX_From_TenXY_Cont_X(); +void force_To_SignX_From_TenXY_Entry(); +void force_To_SignX_From_Vec(); +void force_To_TenXY_X_From_Alt_Cont(); +void force_To_TenXY_X_From_Alt_Entry(); +void force_To_TenXY_X_From_Alt_Signed_Cont(); +void force_To_TenXY_X_From_Alt_Signed_Entry(); +void force_To_TenXY_X_From_Cls_Cont(); +void force_To_TenXY_X_From_Cls_Entry(); +void force_To_TenXY_X_From_Cls_Signed_Cont(); +void force_To_TenXY_X_From_Cls_Signed_Entry(); +void force_To_TenXY_X_From_DigsX_Cont(); +void force_To_TenXY_X_From_DigsX_Entry(); +void force_To_TenXY_X_From_DigsX_Signed(); +void force_To_TenXY_X_From_MatX(); +void force_To_TenXY_X_From_MatX_Signed_Cont(); +void force_To_TenXY_X_From_MatX_Signed_Entry(); +void force_To_TenXY_X_From_SignX_Cont(); +void force_To_TenXY_X_From_SignX_Entry(); +void force_To_TenXY_X_From_TenXY(); +void force_To_TenXY_X_From_TenXY_Signed_Cont(); +void force_To_TenXY_X_From_TenXY_Signed_Cont_X(); +void force_To_TenXY_X_From_TenXY_Signed_Entry(); +void force_To_TenXY_X_From_Vec(); +void force_To_TenXY_X_From_Vec_Signed(); +void force_To_TenXY_X_Until_Refining(); +void force_To_TenXY_Y_From_Alt_Cont(); +void force_To_TenXY_Y_From_Alt_Entry(); +void force_To_TenXY_Y_From_Alt_Signed_Cont(); +void force_To_TenXY_Y_From_Alt_Signed_Entry(); +void force_To_TenXY_Y_From_Cls_Cont(); +void force_To_TenXY_Y_From_Cls_Entry(); +void force_To_TenXY_Y_From_Cls_Signed_Cont(); +void force_To_TenXY_Y_From_Cls_Signed_Entry(); +void force_To_TenXY_Y_From_DigsX_Cont(); +void force_To_TenXY_Y_From_DigsX_Entry(); +void force_To_TenXY_Y_From_DigsX_Signed(); +void force_To_TenXY_Y_From_MatX(); +void force_To_TenXY_Y_From_MatX_Signed_Cont(); +void force_To_TenXY_Y_From_MatX_Signed_Entry(); +void force_To_TenXY_Y_From_SignX_Cont(); +void force_To_TenXY_Y_From_SignX_Entry(); +void force_To_TenXY_Y_From_TenXY(); +void force_To_TenXY_Y_From_TenXY_Signed_Cont(); +void force_To_TenXY_Y_From_TenXY_Signed_Cont_X(); +void force_To_TenXY_Y_From_TenXY_Signed_Entry(); +void force_To_TenXY_Y_From_Vec(); +void force_To_TenXY_Y_From_Vec_Signed(); + +ForceFuncDesc descTable[] = { + {delayCont, "delayCont", 2, ARG_NEITHER}, + {force_Alt_Eval, "force_Alt_Eval", 2, ARG_NEITHER}, + {force_From_Bool_X_Only_Cont, "force_From_Bool_X_Only_Cont", 2, ARG_NEITHER}, + {force_From_Bool_X_Only_Entry, "force_From_Bool_X_Only_Entry", 2, ARG_NEITHER}, + {force_From_Bool_Y_Only_Cont, "force_From_Bool_Y_Only_Cont", 2, ARG_NEITHER}, + {force_From_Bool_Y_Only_Entry, "force_From_Bool_Y_Only_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_Alt_Cont, "forceGtEqZero_To_PredX_From_Alt_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_Alt_Entry, "forceGtEqZero_To_PredX_From_Alt_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_Cls_Cont, "forceGtEqZero_To_PredX_From_Cls_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_Cls_Entry, "forceGtEqZero_To_PredX_From_Cls_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SINF_Cont, "forceGtEqZero_To_PredX_From_DigsX_SINF_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SINF_Entry, "forceGtEqZero_To_PredX_From_DigsX_SINF_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SNEG_Cont, "forceGtEqZero_To_PredX_From_DigsX_SNEG_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SNEG_Entry, "forceGtEqZero_To_PredX_From_DigsX_SNEG_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SZERO_Cont, "forceGtEqZero_To_PredX_From_DigsX_SZERO_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_DigsX_SZERO_Entry, "forceGtEqZero_To_PredX_From_DigsX_SZERO_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_MatX_Cont, "forceGtEqZero_To_PredX_From_MatX_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_MatX_Entry, "forceGtEqZero_To_PredX_From_MatX_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_MatX_Signed_Cont, "forceGtEqZero_To_PredX_From_MatX_Signed_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_MatX_Signed_Entry, "forceGtEqZero_To_PredX_From_MatX_Signed_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_SignX_Cont, "forceGtEqZero_To_PredX_From_SignX_Cont", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_SignX_Entry, "forceGtEqZero_To_PredX_From_SignX_Entry", 2, ARG_NEITHER}, + {forceGtEqZero_To_PredX_From_TenXY, "forceGtEqZero_To_PredX_From_TenXY", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_Alt_Cont, "forceGtZero_To_PredX_From_Alt_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_Alt_Entry, "forceGtZero_To_PredX_From_Alt_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_Cls_Cont, "forceGtZero_To_PredX_From_Cls_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_Cls_Entry, "forceGtZero_To_PredX_From_Cls_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_DigsX_SPOS_Cont, "forceGtZero_To_PredX_From_DigsX_SPOS_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_DigsX_SPOS_Entry, "forceGtZero_To_PredX_From_DigsX_SPOS_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_DigsX_SZERO_Cont, "forceGtZero_To_PredX_From_DigsX_SZERO_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_DigsX_SZERO_Entry, "forceGtZero_To_PredX_From_DigsX_SZERO_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_MatX_Cont, "forceGtZero_To_PredX_From_MatX_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_MatX_Entry, "forceGtZero_To_PredX_From_MatX_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_MatX_Signed_Cont, "forceGtZero_To_PredX_From_MatX_Signed_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_MatX_Signed_Entry, "forceGtZero_To_PredX_From_MatX_Signed_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_SignX_Cont, "forceGtZero_To_PredX_From_SignX_Cont", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_SignX_Entry, "forceGtZero_To_PredX_From_SignX_Entry", 2, ARG_NEITHER}, + {forceGtZero_To_PredX_From_TenXY, "forceGtZero_To_PredX_From_TenXY", 2, ARG_NEITHER}, + {force_To_Alt_Cont, "force_To_Alt_Cont", 2, ARG_NEITHER}, + {force_To_Alt_Entry, "force_To_Alt_Entry", 2, ARG_NEITHER}, + {force_To_Alt_From_The_Abyss, "force_To_Alt_From_The_Abyss", 2, ARG_NEITHER}, + {force_To_Alt_Reduce, "force_To_Alt_Reduce", 2, ARG_NEITHER}, + {force_To_And_From_Bool_X_Cont, "force_To_And_From_Bool_X_Cont", 2, ARG_X}, + {force_To_And_From_Bool_X_Entry, "force_To_And_From_Bool_X_Entry", 2, ARG_X}, + {force_To_And_From_Bool_Y_Cont, "force_To_And_From_Bool_Y_Cont", 2, ARG_Y}, + {force_To_And_From_Bool_Y_Entry, "force_To_And_From_Bool_Y_Entry", 2, ARG_Y}, + {force_To_Bool_From_The_Abyss, "force_To_Bool_From_The_Abyss", 2, ARG_NEITHER}, + {force_To_DigsX_From_Alt_Cont, "force_To_DigsX_From_Alt_Cont", 3, ARG_NEITHER}, + {force_To_DigsX_From_Alt_Entry, "force_To_DigsX_From_Alt_Entry", 3, ARG_NEITHER}, + {force_To_DigsX_From_Cls_Cont, "force_To_DigsX_From_Cls_Cont", 2, ARG_NEITHER}, + {force_To_DigsX_From_Cls_Entry, "force_To_DigsX_From_Cls_Entry", 2, ARG_NEITHER}, + {force_To_DigsX_From_DigsX_Cont, "force_To_DigsX_From_DigsX_Cont", 3, ARG_NEITHER}, + {force_To_DigsX_From_DigsX_Entry, "force_To_DigsX_From_DigsX_Entry", 3, ARG_NEITHER}, + {force_To_DigsX_From_MatX_Cont, "force_To_DigsX_From_MatX_Cont", 3, ARG_NEITHER}, + {force_To_DigsX_From_MatX_Entry, "force_To_DigsX_From_MatX_Entry", 3, ARG_NEITHER}, + {force_To_DigsX_From_TenXY_Cont, "force_To_DigsX_From_TenXY_Cont", 3, ARG_NEITHER}, + {force_To_DigsX_From_TenXY_Cont_X, "force_To_DigsX_From_TenXY_Cont_X", 3, ARG_NEITHER}, + {force_To_DigsX_From_TenXY_Entry, "force_To_DigsX_From_TenXY_Entry", 3, ARG_NEITHER}, + {force_To_DigsX_From_Vec, "force_To_DigsX_From_Vec", 3, ARG_NEITHER}, + {force_To_MatX_From_Alt_Cont, "force_To_MatX_From_Alt_Cont", 3, ARG_NEITHER}, + {force_To_MatX_From_Alt_Entry, "force_To_MatX_From_Alt_Entry", 3, ARG_NEITHER}, + {force_To_MatX_From_Alt_Signed_Cont, "force_To_MatX_From_Alt_Signed_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_Alt_Signed_Entry, "force_To_MatX_From_Alt_Signed_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_Cls_Cont, "force_To_MatX_From_Cls_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_Cls_Entry, "force_To_MatX_From_Cls_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_Cls_Signed_Cont, "force_To_MatX_From_Cls_Signed_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_Cls_Signed_Entry, "force_To_MatX_From_Cls_Signed_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_DigsX_Cont, "force_To_MatX_From_DigsX_Cont", 3, ARG_NEITHER}, + {force_To_MatX_From_DigsX_Entry, "force_To_MatX_From_DigsX_Entry", 3, ARG_NEITHER}, + {force_To_MatX_From_DigsX_Signed, "force_To_MatX_From_DigsX_Signed", 2, ARG_NEITHER}, + {force_To_MatX_From_MatX, "force_To_MatX_From_MatX", 3, ARG_NEITHER}, + {force_To_MatX_From_MatX_Signed_Cont, "force_To_MatX_From_MatX_Signed_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_MatX_Signed_Entry, "force_To_MatX_From_MatX_Signed_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_SignX_Cont, "force_To_MatX_From_SignX_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_SignX_Entry, "force_To_MatX_From_SignX_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_TenXY, "force_To_MatX_From_TenXY", 3, ARG_NEITHER}, + {force_To_MatX_From_TenXY_Signed_Cont, "force_To_MatX_From_TenXY_Signed_Cont", 2, ARG_NEITHER}, + {force_To_MatX_From_TenXY_Signed_Cont_X, "force_To_MatX_From_TenXY_Signed_Cont_X", 2, ARG_NEITHER}, + {force_To_MatX_From_TenXY_Signed_Entry, "force_To_MatX_From_TenXY_Signed_Entry", 2, ARG_NEITHER}, + {force_To_MatX_From_Vec, "force_To_MatX_From_Vec", 3, ARG_NEITHER}, + {force_To_MatX_From_Vec_Signed, "force_To_MatX_From_Vec_Signed", 2, ARG_NEITHER}, + {force_To_Not_From_Bool_Cont, "force_To_Not_From_Bool_Cont", 2, ARG_NEITHER}, + {force_To_Not_From_Bool_Entry, "force_To_Not_From_Bool_Entry", 2, ARG_NEITHER}, + {force_To_Or_From_Bool_X_Cont, "force_To_Or_From_Bool_X_Cont", 2, ARG_X}, + {force_To_Or_From_Bool_X_Entry, "force_To_Or_From_Bool_X_Entry", 2, ARG_X}, + {force_To_Or_From_Bool_Y_Cont, "force_To_Or_From_Bool_Y_Cont", 2, ARG_Y}, + {force_To_Or_From_Bool_Y_Entry, "force_To_Or_From_Bool_Y_Entry", 2, ARG_Y}, + {force_To_PredX_From_DigsX_2n_minus_1_False_Cont, "force_To_PredX_From_DigsX_2n_minus_1_False_Cont", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_2n_minus_1_False_Entry, "force_To_PredX_From_DigsX_2n_minus_1_False_Entry", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_2n_minus_1_True_Cont, "force_To_PredX_From_DigsX_2n_minus_1_True_Cont", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_2n_minus_1_True_Entry, "force_To_PredX_From_DigsX_2n_minus_1_True_Entry", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_minus_2n_minus_1_False_Cont, "force_To_PredX_From_DigsX_minus_2n_minus_1_False_Cont", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_minus_2n_minus_1_False_Entry, "force_To_PredX_From_DigsX_minus_2n_minus_1_False_Entry", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_minus_2n_minus_1_True_Cont, "force_To_PredX_From_DigsX_minus_2n_minus_1_True_Cont", 2, ARG_NEITHER}, + {force_To_PredX_From_DigsX_minus_2n_minus_1_True_Entry, "force_To_PredX_From_DigsX_minus_2n_minus_1_True_Entry", 2, ARG_NEITHER}, + {force_To_PredX_From_The_Abyss, "force_To_PredX_From_The_Abyss", 2, ARG_NEITHER}, + {force_To_SignX_From_Alt_Cont, "force_To_SignX_From_Alt_Cont", 2, ARG_NEITHER}, + {force_To_SignX_From_Alt_Entry, "force_To_SignX_From_Alt_Entry", 2, ARG_NEITHER}, + {force_To_SignX_From_Cls_Cont, "force_To_SignX_From_Cls_Cont", 2, ARG_NEITHER}, + {force_To_SignX_From_Cls_Entry, "force_To_SignX_From_Cls_Entry", 2, ARG_NEITHER}, + {force_To_SignX_From_DigsX, "force_To_SignX_From_DigsX", 2, ARG_NEITHER}, + {force_To_SignX_From_MatX_Cont, "force_To_SignX_From_MatX_Cont", 2, ARG_NEITHER}, + {force_To_SignX_From_MatX_Entry, "force_To_SignX_From_MatX_Entry", 2, ARG_NEITHER}, + {force_To_SignX_From_TenXY_Cont, "force_To_SignX_From_TenXY_Cont", 2, ARG_NEITHER}, + {force_To_SignX_From_TenXY_Cont_X, "force_To_SignX_From_TenXY_Cont_X", 2, ARG_NEITHER}, + {force_To_SignX_From_TenXY_Entry, "force_To_SignX_From_TenXY_Entry", 2, ARG_NEITHER}, + {force_To_SignX_From_Vec, "force_To_SignX_From_Vec", 2, ARG_NEITHER}, + {force_To_TenXY_X_From_Alt_Cont, "force_To_TenXY_X_From_Alt_Cont", 3, ARG_X}, + {force_To_TenXY_X_From_Alt_Entry, "force_To_TenXY_X_From_Alt_Entry", 3, ARG_X}, + {force_To_TenXY_X_From_Alt_Signed_Cont, "force_To_TenXY_X_From_Alt_Signed_Cont", 2, ARG_X}, + {force_To_TenXY_X_From_Alt_Signed_Entry, "force_To_TenXY_X_From_Alt_Signed_Entry", 2, ARG_X}, + {force_To_TenXY_X_From_Cls_Cont, "force_To_TenXY_X_From_Cls_Cont", 3, ARG_X}, + {force_To_TenXY_X_From_Cls_Entry, "force_To_TenXY_X_From_Cls_Entry", 3, ARG_X}, + {force_To_TenXY_X_From_Cls_Signed_Cont, "force_To_TenXY_X_From_Cls_Signed_Cont", 2, ARG_X}, + {force_To_TenXY_X_From_Cls_Signed_Entry, "force_To_TenXY_X_From_Cls_Signed_Entry", 2, ARG_X}, + {force_To_TenXY_X_From_DigsX_Cont, "force_To_TenXY_X_From_DigsX_Cont", 3, ARG_X}, + {force_To_TenXY_X_From_DigsX_Entry, "force_To_TenXY_X_From_DigsX_Entry", 3, ARG_X}, + {force_To_TenXY_X_From_DigsX_Signed, "force_To_TenXY_X_From_DigsX_Signed", 2, ARG_X}, + {force_To_TenXY_X_From_MatX, "force_To_TenXY_X_From_MatX", 3, ARG_X}, + {force_To_TenXY_X_From_MatX_Signed_Cont, "force_To_TenXY_X_From_MatX_Signed_Cont", 2, ARG_X}, + {force_To_TenXY_X_From_MatX_Signed_Entry, "force_To_TenXY_X_From_MatX_Signed_Entry", 2, ARG_X}, + {force_To_TenXY_X_From_SignX_Cont, "force_To_TenXY_X_From_SignX_Cont", 2, ARG_X}, + {force_To_TenXY_X_From_SignX_Entry, "force_To_TenXY_X_From_SignX_Entry", 2, ARG_X}, + {force_To_TenXY_X_From_TenXY, "force_To_TenXY_X_From_TenXY", 3, ARG_X}, + {force_To_TenXY_X_From_TenXY_Signed_Cont, "force_To_TenXY_X_From_TenXY_Signed_Cont", 2, ARG_X}, + {force_To_TenXY_X_From_TenXY_Signed_Cont_X, "force_To_TenXY_X_From_TenXY_Signed_Cont_X", 2, ARG_X}, + {force_To_TenXY_X_From_TenXY_Signed_Entry, "force_To_TenXY_X_From_TenXY_Signed_Entry", 2, ARG_X}, + {force_To_TenXY_X_From_Vec, "force_To_TenXY_X_From_Vec", 3, ARG_X}, + {force_To_TenXY_X_From_Vec_Signed, "force_To_TenXY_X_From_Vec_Signed", 2, ARG_X}, + {force_To_TenXY_X_Until_Refining, "force_To_TenXY_X_Until_Refining", 2, ARG_X}, + {force_To_TenXY_Y_From_Alt_Cont, "force_To_TenXY_Y_From_Alt_Cont", 3, ARG_Y}, + {force_To_TenXY_Y_From_Alt_Entry, "force_To_TenXY_Y_From_Alt_Entry", 3, ARG_Y}, + {force_To_TenXY_Y_From_Alt_Signed_Cont, "force_To_TenXY_Y_From_Alt_Signed_Cont", 2, ARG_Y}, + {force_To_TenXY_Y_From_Alt_Signed_Entry, "force_To_TenXY_Y_From_Alt_Signed_Entry", 2, ARG_Y}, + {force_To_TenXY_Y_From_Cls_Cont, "force_To_TenXY_Y_From_Cls_Cont", 3, ARG_Y}, + {force_To_TenXY_Y_From_Cls_Entry, "force_To_TenXY_Y_From_Cls_Entry", 3, ARG_Y}, + {force_To_TenXY_Y_From_Cls_Signed_Cont, "force_To_TenXY_Y_From_Cls_Signed_Cont", 2, ARG_Y}, + {force_To_TenXY_Y_From_Cls_Signed_Entry, "force_To_TenXY_Y_From_Cls_Signed_Entry", 2, ARG_Y}, + {force_To_TenXY_Y_From_DigsX_Cont, "force_To_TenXY_Y_From_DigsX_Cont", 3, ARG_Y}, + {force_To_TenXY_Y_From_DigsX_Entry, "force_To_TenXY_Y_From_DigsX_Entry", 3, ARG_Y}, + {force_To_TenXY_Y_From_DigsX_Signed, "force_To_TenXY_Y_From_DigsX_Signed", 2, ARG_Y}, + {force_To_TenXY_Y_From_MatX, "force_To_TenXY_Y_From_MatX", 3, ARG_Y}, + {force_To_TenXY_Y_From_MatX_Signed_Cont, "force_To_TenXY_Y_From_MatX_Signed_Cont", 2, ARG_Y}, + {force_To_TenXY_Y_From_MatX_Signed_Entry, "force_To_TenXY_Y_From_MatX_Signed_Entry", 2, ARG_Y}, + {force_To_TenXY_Y_From_SignX_Cont, "force_To_TenXY_Y_From_SignX_Cont", 2, ARG_Y}, + {force_To_TenXY_Y_From_SignX_Entry, "force_To_TenXY_Y_From_SignX_Entry", 2, ARG_Y}, + {force_To_TenXY_Y_From_TenXY, "force_To_TenXY_Y_From_TenXY", 3, ARG_Y}, + {force_To_TenXY_Y_From_TenXY_Signed_Cont, "force_To_TenXY_Y_From_TenXY_Signed_Cont", 2, ARG_Y}, + {force_To_TenXY_Y_From_TenXY_Signed_Cont_X, "force_To_TenXY_Y_From_TenXY_Signed_Cont_X", 2, ARG_Y}, + {force_To_TenXY_Y_From_TenXY_Signed_Entry, "force_To_TenXY_Y_From_TenXY_Signed_Entry", 2, ARG_Y}, + {force_To_TenXY_Y_From_Vec, "force_To_TenXY_Y_From_Vec", 3, ARG_Y}, + {force_To_TenXY_Y_From_Vec_Signed, "force_To_TenXY_Y_From_Vec_Signed", 2, ARG_Y} +}; + +void *root; + +/* + * Compares the functions in two descriptors. + */ +static int +compare(const void *p, const void *q) +{ + if (((ForceFuncDesc *) p)->func < ((ForceFuncDesc *) q)->func) + return -1; + if (((ForceFuncDesc *) p)->func > ((ForceFuncDesc *) q)->func) + return 1; + return 0; +} + +/* + * Retrieves the descriptor for the specified function. + */ +ForceFuncDesc * +getDescForForceFunc(void (*func)()) +{ + void *p; + ForceFuncDesc fd = {NULL, "no-name", 0, 0}; + + fd.func = func; + p = tfind((void *) &fd, (void **) &root, compare); + if (p == NULL) + return (ForceFuncDesc *) NULL; + else + return *((ForceFuncDesc **) p); +} + +/* + * The table above only lists those continuation/force functions pertaining + * to bools, signs and digits for the basic types of objects in the heap. + * These include lfts and booleans. It does not include any information + * relating to user defined continutions/closures. These include the closures + * for analytic functions which generate more matrices and tensors when + * forced. The function below allows one to add descriptive information + * for user-defined continuations. + */ +void +registerForceFunc(void (*func)(), char *funcName, int nArgs) +{ + ForceFuncDesc *p; + + if ((p = (ForceFuncDesc *) malloc(sizeof(ForceFuncDesc))) == NULL) + Error(FATAL, E_INT, "registerForceMethod", "malloc failed"); + + p->func = func; + p->funcName = funcName; + p->nArgs = nArgs; + p->argXOrY = ARG_NEITHER; + + (void) tsearch((void *) p, &root, compare); +} + +void +initForceMethodLookupTable() +{ + unsigned int i; + void *p; + + root = NULL; + for (i = 0; i < sizeof(descTable) / sizeof(ForceFuncDesc); i++) { + p = tsearch((void *) (descTable + i), &root, compare); + if (p == NULL) + Error(FATAL, E_INT, "initForceMethodLookupTable", + "tsearch returned NULL"); + } +} -- cgit v1.2.3