=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2018/builtin/dp-supp.c,v retrieving revision 1.13 retrieving revision 1.15 diff -u -p -r1.13 -r1.15 --- OpenXM_contrib2/asir2018/builtin/dp-supp.c 2019/12/27 08:13:59 1.13 +++ OpenXM_contrib2/asir2018/builtin/dp-supp.c 2020/10/26 02:41:05 1.15 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2018/builtin/dp-supp.c,v 1.12 2019/12/12 04:44:59 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2018/builtin/dp-supp.c,v 1.14 2020/07/02 09:24:16 noro Exp $ */ #include "ca.h" #include "base.h" @@ -315,6 +315,21 @@ int _dl_redble(DL d1,DL d2,int nvar) return 1; } +int _dl_redble_ext(DL d1,DL d2,DL quo,int nvar) +{ + int i; + + if ( (quo->td = d2->td-d1->td) < 0 ) + return 0; + for ( i = 0; i < nvar; i++ ) + if ( (quo->d[i] = d2->d[i]-d1->d[i]) < 0 ) + break; + if ( i < nvar ) + return 0; + else + return 1; +} + void insert_to_node(DL d,NODE *n,int nvar) { DL d1; @@ -3318,6 +3333,29 @@ void dp_mod(DP p,int mod,NODE subst,DP *rp) } if ( mr0 ) { NEXT(mr) = 0; MKDP(p->nv,mr0,*rp); (*rp)->sugar = p->sugar; + } else + *rp = 0; + } +} + +void dpm_mod(DPM p,int mod,DPM *rp) +{ + DMM m,mr,mr0; + P t; + V v; + NODE tn; + + if ( !p ) + *rp = 0; + else { + for ( mr0 = 0, m = BDY(p); m; m = NEXT(m) ) { + ptomp(mod,(P)m->c,&t); + if ( t ) { + NEXTDMM(mr0,mr); mr->c = (Obj)t; mr->dl = m->dl; + } + } + if ( mr0 ) { + NEXT(mr) = 0; MKDPM(p->nv,mr0,*rp); (*rp)->sugar = p->sugar; } else *rp = 0; }