static int p_rl_b_in1(void) { YAP_Term t1=YAP_Deref(YAP_ARG1); YAP_Term t2=YAP_Deref(YAP_ARG2); IDTYPE id; NUM val; RL_Tree *tree; // Check args if (!YAP_IsIntTerm(t1)) { YAP_cut_fail(); return(FALSE); } if ( YAP_IsVarTerm(t2) ) { // return all in through backtracking YAP_PRESERVE_DATA(back_data,yap_back_data_type); back_data->last_solution = YAP_MkIntTerm(0); return p_rl_b_in2(); } else { id = YAP_IntOfTerm(t1); tree=ID2PTR(id); val = YAP_IntOfTerm(t2); if ( in_rl(tree,val) ) { YAP_cut_succeed(); return (TRUE); } YAP_cut_fail(); return (FALSE); } }
static int p_itrie_traverse_cont(void) { TrData data; /* traverse itrie */ if (!(data = itrie_traverse_cont((TrEntry) YAP_IntOfTerm(arg_itrie)))) { YAP_cut_fail(); return FALSE; } return YAP_Unify(arg_ref, YAP_MkIntTerm((YAP_Int) data)); }
static int p_trie_traverse_init(void) { TrData data; /* check args */ if (!YAP_IsIntTerm(arg_trie)) return FALSE; if (!YAP_IsIntTerm(arg_init_ref)) return FALSE; /* traverse trie */ if (!(data = trie_traverse_init((TrEntry) YAP_IntOfTerm(arg_trie), (TrData) YAP_IntOfTerm(arg_init_ref)))) { YAP_cut_fail(); return FALSE; } return YAP_Unify(arg_ref, YAP_MkIntTerm((YAP_Int) data)); }
static int p_rl_b_in2(void) { YAP_Term t1=YAP_Deref(YAP_ARG1); IDTYPE id; NUM val; RL_Tree *tree; YAP_PRESERVED_DATA(back_data,yap_back_data_type); id = YAP_IntOfTerm(t1); tree=ID2PTR(id); val=YAP_IntOfTerm(back_data->last_solution); val=rl_next_in_bigger(tree,val); if ( val > 0 && YAP_Unify(YAP_Deref(YAP_ARG2),YAP_MkIntTerm(val))) { back_data->last_solution=YAP_MkIntTerm(val); return TRUE; } YAP_cut_fail(); return (FALSE); }