version 1.12, 2019/09/04 05:32:10 |
version 1.14, 2019/09/13 09:02:49 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/dp.c,v 1.11 2019/09/04 01:12:02 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2018/builtin/dp.c,v 1.13 2019/09/05 08:49:43 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 277 struct ftab dp_supp_tab[] = { |
|
Line 277 struct ftab dp_supp_tab[] = { |
|
|
|
{"dpm_ltod",Pdpm_ltod,2}, |
{"dpm_ltod",Pdpm_ltod,2}, |
{"dpm_dptodpm",Pdpm_dptodpm,2}, |
{"dpm_dptodpm",Pdpm_dptodpm,2}, |
{"dpm_dtol",Pdpm_dtol,3}, |
{"dpm_dtol",Pdpm_dtol,2}, |
|
|
/* criteria */ |
/* criteria */ |
{"dp_cri1",Pdp_cri1,2}, |
{"dp_cri1",Pdp_cri1,2}, |
Line 1124 void Pdpm_dtol(NODE arg,LIST *rp) |
|
Line 1124 void Pdpm_dtol(NODE arg,LIST *rp) |
|
Obj s; |
Obj s; |
|
|
a = (DPM)ARG0(arg); |
a = (DPM)ARG0(arg); |
|
if ( !a ) { |
|
MKLIST(*rp,0); |
|
return; |
|
} |
for ( vl = 0, nd = BDY((LIST)ARG1(arg)), nv = 0; nd; nd = NEXT(nd), nv++ ) { |
for ( vl = 0, nd = BDY((LIST)ARG1(arg)), nv = 0; nd; nd = NEXT(nd), nv++ ) { |
if ( !vl ) { |
if ( !vl ) { |
NEWVL(vl); tvl = vl; |
NEWVL(vl); tvl = vl; |
Line 1134 void Pdpm_dtol(NODE arg,LIST *rp) |
|
Line 1138 void Pdpm_dtol(NODE arg,LIST *rp) |
|
} |
} |
if ( vl ) |
if ( vl ) |
NEXT(tvl) = 0; |
NEXT(tvl) = 0; |
n = ZTOS((Q)ARG2(arg)); |
for ( t = BDY(a), n = 0; t; t = NEXT(t) ) |
|
if ( t->pos > n ) n = t->pos; |
w = (MP *)CALLOC(n,sizeof(MP)); |
w = (MP *)CALLOC(n,sizeof(MP)); |
for ( t = BDY(a), len = 0; t; t = NEXT(t) ) len++; |
for ( t = BDY(a), len = 0; t; t = NEXT(t) ) len++; |
wa = (DMM *)MALLOC(len*sizeof(DMM)); |
wa = (DMM *)MALLOC(len*sizeof(DMM)); |
Line 1142 void Pdpm_dtol(NODE arg,LIST *rp) |
|
Line 1147 void Pdpm_dtol(NODE arg,LIST *rp) |
|
for ( i = len-1; i >= 0; i-- ) { |
for ( i = len-1; i >= 0; i-- ) { |
NEWMP(m); m->dl = wa[i]->dl; C(m) = C(wa[i]); |
NEWMP(m); m->dl = wa[i]->dl; C(m) = C(wa[i]); |
pos = wa[i]->pos; |
pos = wa[i]->pos; |
NEXT(m) = w[pos]; |
NEXT(m) = w[pos-1]; |
w[pos] = m; |
w[pos-1] = m; |
} |
} |
nd = 0; |
nd = 0; |
for ( i = n-1; i >= 0; i-- ) { |
for ( i = n-1; i >= 0; i-- ) { |
Line 4006 void Pdpm_split(NODE arg,LIST *rp) |
|
Line 4011 void Pdpm_split(NODE arg,LIST *rp) |
|
} |
} |
|
|
|
|
void Pdpm_hc(NODE arg,Obj *rp) |
void Pdpm_hc(NODE arg,DP *rp) |
{ |
{ |
|
DPM p; |
|
DP d; |
|
MP m; |
|
|
asir_assert(ARG0(arg),O_DPM,"dpm_hc"); |
asir_assert(ARG0(arg),O_DPM,"dpm_hc"); |
if ( !ARG0(arg) ) |
if ( !ARG0(arg) ) |
*rp = 0; |
*rp = 0; |
else |
else { |
*rp = BDY((DPM)ARG0(arg))->c; |
p = (DPM)ARG0(arg); |
|
NEWMP(m); |
|
m->dl = BDY(p)->dl; |
|
m->c = BDY(p)->c; |
|
NEXT(m) = 0; |
|
MKDP(NV(p),m,d); d->sugar = p->sugar; |
|
*rp = d; |
|
} |
} |
} |
|
|
|
|
void Pdpv_ht(NODE arg,LIST *rp) |
void Pdpv_ht(NODE arg,LIST *rp) |
{ |
{ |