version 1.98, 2016/03/31 08:43:25 |
version 1.102, 2017/02/28 07:06:28 |
|
|
* 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/asir2000/builtin/dp.c,v 1.97 2016/03/31 07:33:32 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/dp.c,v 1.101 2017/02/27 05:21:19 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
Line 2103 void Pnd_f4(NODE arg,LIST *rp) |
|
Line 2103 void Pnd_f4(NODE arg,LIST *rp) |
|
LIST f,v; |
LIST f,v; |
int m,homo,retdp; |
int m,homo,retdp; |
Obj val; |
Obj val; |
|
Q mq; |
|
NODE node; |
struct order_spec *ord; |
struct order_spec *ord; |
|
|
do_weyl = 0; |
do_weyl = 0; |
Line 2115 void Pnd_f4(NODE arg,LIST *rp) |
|
Line 2117 void Pnd_f4(NODE arg,LIST *rp) |
|
if ( !BDY(f) ) { |
if ( !BDY(f) ) { |
*rp = f; return; |
*rp = f; return; |
} |
} |
m = QTOS((Q)ARG2(arg)); |
mq = (Q)ARG2(arg); |
|
if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = QTOS(mq); |
create_order_spec(0,ARG3(arg),&ord); |
create_order_spec(0,ARG3(arg),&ord); |
homo = retdp = 0; |
homo = retdp = 0; |
if ( get_opt("homo",&val) && val ) homo = 1; |
if ( get_opt("homo",&val) && val ) homo = 1; |
Line 2129 void Pnd_gr(NODE arg,LIST *rp) |
|
Line 2137 void Pnd_gr(NODE arg,LIST *rp) |
|
LIST f,v; |
LIST f,v; |
int m,homo,retdp; |
int m,homo,retdp; |
Obj val; |
Obj val; |
|
Q mq; |
|
NODE node; |
struct order_spec *ord; |
struct order_spec *ord; |
|
|
do_weyl = 0; |
do_weyl = 0; |
Line 2140 void Pnd_gr(NODE arg,LIST *rp) |
|
Line 2150 void Pnd_gr(NODE arg,LIST *rp) |
|
if ( !BDY(f) ) { |
if ( !BDY(f) ) { |
*rp = f; return; |
*rp = f; return; |
} |
} |
m = QTOS((Q)ARG2(arg)); |
mq = (Q)ARG2(arg); |
|
if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = QTOS(mq); |
create_order_spec(0,ARG3(arg),&ord); |
create_order_spec(0,ARG3(arg),&ord); |
homo = retdp = 0; |
homo = retdp = 0; |
if ( get_opt("homo",&val) && val ) homo = 1; |
if ( get_opt("homo",&val) && val ) homo = 1; |
Line 2152 void Pnd_gr_postproc(NODE arg,LIST *rp) |
|
Line 2168 void Pnd_gr_postproc(NODE arg,LIST *rp) |
|
{ |
{ |
LIST f,v; |
LIST f,v; |
int m,do_check; |
int m,do_check; |
|
Q mq; |
|
Obj val; |
|
NODE node; |
struct order_spec *ord; |
struct order_spec *ord; |
|
|
do_weyl = 0; |
do_weyl = 0; |
Line 2163 void Pnd_gr_postproc(NODE arg,LIST *rp) |
|
Line 2182 void Pnd_gr_postproc(NODE arg,LIST *rp) |
|
if ( !BDY(f) ) { |
if ( !BDY(f) ) { |
*rp = f; return; |
*rp = f; return; |
} |
} |
m = QTOS((Q)ARG2(arg)); |
mq = (Q)ARG2(arg); |
|
if ( mq && (PL(NM(mq)) > 1 || BD(NM(mq))[0] >= (1<<30)) ) { |
|
node = mknode(1,mq); |
|
Psetmod_ff(node,&val); |
|
m = -2; |
|
} else |
|
m = QTOS(mq); |
create_order_spec(0,ARG3(arg),&ord); |
create_order_spec(0,ARG3(arg),&ord); |
do_check = ARG4(arg) ? 1 : 0; |
do_check = ARG4(arg) ? 1 : 0; |
nd_gr_postproc(f,v,m,ord,do_check,rp); |
nd_gr_postproc(f,v,m,ord,do_check,rp); |
Line 2498 void Pdp_weyl_gr_mod_main(NODE arg,LIST *rp) |
|
Line 2523 void Pdp_weyl_gr_mod_main(NODE arg,LIST *rp) |
|
|
|
VECT current_dl_weight_vector_obj; |
VECT current_dl_weight_vector_obj; |
int *current_dl_weight_vector; |
int *current_dl_weight_vector; |
|
int dp_negative_weight; |
|
|
void Pdp_set_weight(NODE arg,VECT *rp) |
void Pdp_set_weight(NODE arg,VECT *rp) |
{ |
{ |
Line 2510 void Pdp_set_weight(NODE arg,VECT *rp) |
|
Line 2536 void Pdp_set_weight(NODE arg,VECT *rp) |
|
else if ( !ARG0(arg) ) { |
else if ( !ARG0(arg) ) { |
current_dl_weight_vector_obj = 0; |
current_dl_weight_vector_obj = 0; |
current_dl_weight_vector = 0; |
current_dl_weight_vector = 0; |
|
dp_negative_weight = 0; |
*rp = 0; |
*rp = 0; |
} else { |
} else { |
if ( OID(ARG0(arg)) != O_VECT && OID(ARG0(arg)) != O_LIST ) |
if ( OID(ARG0(arg)) != O_VECT && OID(ARG0(arg)) != O_LIST ) |
Line 2528 void Pdp_set_weight(NODE arg,VECT *rp) |
|
Line 2555 void Pdp_set_weight(NODE arg,VECT *rp) |
|
current_dl_weight_vector = (int *)CALLOC(n,sizeof(int)); |
current_dl_weight_vector = (int *)CALLOC(n,sizeof(int)); |
for ( i = 0; i < n; i++ ) |
for ( i = 0; i < n; i++ ) |
current_dl_weight_vector[i] = QTOS((Q)v->body[i]); |
current_dl_weight_vector[i] = QTOS((Q)v->body[i]); |
|
for ( i = 0; i < n; i++ ) |
|
if ( current_dl_weight_vector[i] < 0 ) break; |
|
if ( i < n ) |
|
dp_negative_weight = 1; |
|
else |
|
dp_negative_weight = 0; |
*rp = v; |
*rp = v; |
} |
} |
} |
} |