version 1.8, 2000/09/21 09:19:25 |
version 1.12, 2001/06/07 04:54:38 |
|
|
* 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/array.c,v 1.7 2000/08/22 05:03:56 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/builtin/array.c,v 1.11 2000/12/05 06:59:15 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
#include "base.h" |
#include "base.h" |
|
|
#define DMAR(a1,a2,a3,d,r) (r)=dmar(a1,a2,a3,d); |
#define DMAR(a1,a2,a3,d,r) (r)=dmar(a1,a2,a3,d); |
#endif |
#endif |
|
|
extern int Print; /* XXX */ |
extern int DP_Print; /* XXX */ |
|
|
void inner_product_mat_int_mod(Q **,int **,int,int,int,Q *); |
void inner_product_mat_int_mod(Q **,int **,int,int,int,Q *); |
void solve_by_lu_mod(int **,int,int,int **,int); |
void solve_by_lu_mod(int **,int,int,int **,int); |
Line 73 int gauss_elim_mod1(int **,int,int,int); |
|
Line 73 int gauss_elim_mod1(int **,int,int,int); |
|
int gauss_elim_geninv_mod(unsigned int **,int,int,int); |
int gauss_elim_geninv_mod(unsigned int **,int,int,int); |
int gauss_elim_geninv_mod_swap(unsigned int **,int,int,unsigned int,unsigned int ***,int **); |
int gauss_elim_geninv_mod_swap(unsigned int **,int,int,unsigned int,unsigned int ***,int **); |
void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(), Pleqm(), Pleqm1(), Pgeninvm(); |
void Pnewvect(), Pnewmat(), Psepvect(), Psize(), Pdet(), Pleqm(), Pleqm1(), Pgeninvm(); |
|
void Pnewbytearray(); |
|
|
void Pgeneric_gauss_elim_mod(); |
void Pgeneric_gauss_elim_mod(); |
|
|
Line 97 struct ftab array_tab[] = { |
|
Line 98 struct ftab array_tab[] = { |
|
{"generic_gauss_elim_mod",Pgeneric_gauss_elim_mod,2}, |
{"generic_gauss_elim_mod",Pgeneric_gauss_elim_mod,2}, |
{"newvect",Pnewvect,-2}, |
{"newvect",Pnewvect,-2}, |
{"newmat",Pnewmat,-3}, |
{"newmat",Pnewmat,-3}, |
|
{"newbytearray",Pnewbytearray,-2}, |
{"sepmat_destructive",Psepmat_destructive,2}, |
{"sepmat_destructive",Psepmat_destructive,2}, |
{"sepvect",Psepvect,2}, |
{"sepvect",Psepvect,2}, |
{"qsort",Pqsort,-2}, |
{"qsort",Pqsort,-2}, |
|
|
*rp = vect; |
*rp = vect; |
} |
} |
|
|
|
void Pnewbytearray(arg,rp) |
|
NODE arg; |
|
BYTEARRAY *rp; |
|
{ |
|
int len,i,r; |
|
BYTEARRAY array; |
|
unsigned char *vb; |
|
char *str; |
|
LIST list; |
|
NODE tn; |
|
|
|
asir_assert(ARG0(arg),O_N,"newbytearray"); |
|
len = QTOS((Q)ARG0(arg)); |
|
if ( len < 0 ) |
|
error("newbytearray : invalid size"); |
|
MKBYTEARRAY(array,len); |
|
if ( argc(arg) == 2 ) { |
|
if ( !ARG1(arg) ) |
|
error("newbytearray : invalid initialization"); |
|
switch ( OID((Obj)ARG1(arg)) ) { |
|
case O_LIST: |
|
list = (LIST)ARG1(arg); |
|
asir_assert(list,O_LIST,"newbytearray"); |
|
for ( r = 0, tn = BDY(list); tn; r++, tn = NEXT(tn) ); |
|
if ( r <= len ) { |
|
for ( i = 0, tn = BDY(list), vb = BDY(array); tn; |
|
i++, tn = NEXT(tn) ) |
|
vb[i] = (unsigned char)QTOS((Q)BDY(tn)); |
|
} |
|
break; |
|
case O_STR: |
|
str = BDY((STRING)ARG1(arg)); |
|
r = strlen(str); |
|
if ( r <= len ) |
|
bcopy(str,BDY(array),r); |
|
break; |
|
default: |
|
if ( !ARG1(arg) ) |
|
error("newbytearray : invalid initialization"); |
|
} |
|
} |
|
*rp = array; |
|
} |
|
|
void Pnewmat(arg,rp) |
void Pnewmat(arg,rp) |
NODE arg; |
NODE arg; |
MAT *rp; |
MAT *rp; |
Line 759 int **rindp,**cindp; |
|
Line 805 int **rindp,**cindp; |
|
colstat = (int *)MALLOC_ATOMIC(col*sizeof(int)); |
colstat = (int *)MALLOC_ATOMIC(col*sizeof(int)); |
wcolstat = (int *)MALLOC_ATOMIC(col*sizeof(int)); |
wcolstat = (int *)MALLOC_ATOMIC(col*sizeof(int)); |
for ( ind = 0; ; ind++ ) { |
for ( ind = 0; ; ind++ ) { |
if ( Print ) { |
if ( DP_Print ) { |
fprintf(asir_out,"."); fflush(asir_out); |
fprintf(asir_out,"."); fflush(asir_out); |
} |
} |
md = lprime[ind]; |
md = get_lprime(ind); |
get_eg(&tmp0); |
get_eg(&tmp0); |
for ( i = 0; i < row; i++ ) |
for ( i = 0; i < row; i++ ) |
for ( j = 0, bmi = bmat[i], wmi = wmat[i]; j < col; j++ ) |
for ( j = 0, bmi = bmat[i], wmi = wmat[i]; j < col; j++ ) |
|
|
} |
} |
} else { |
} else { |
if ( rank < rank0 ) { |
if ( rank < rank0 ) { |
if ( Print ) { |
if ( DP_Print ) { |
fprintf(asir_out,"lower rank matrix; continuing...\n"); |
fprintf(asir_out,"lower rank matrix; continuing...\n"); |
fflush(asir_out); |
fflush(asir_out); |
} |
} |
continue; |
continue; |
} else if ( rank > rank0 ) { |
} else if ( rank > rank0 ) { |
if ( Print ) { |
if ( DP_Print ) { |
fprintf(asir_out,"higher rank matrix; resetting...\n"); |
fprintf(asir_out,"higher rank matrix; resetting...\n"); |
fflush(asir_out); |
fflush(asir_out); |
} |
} |
|
|
} else { |
} else { |
for ( j = 0; (j<col) && (colstat[j]==wcolstat[j]); j++ ); |
for ( j = 0; (j<col) && (colstat[j]==wcolstat[j]); j++ ); |
if ( j < col ) { |
if ( j < col ) { |
if ( Print ) { |
if ( DP_Print ) { |
fprintf(asir_out,"inconsitent colstat; resetting...\n"); |
fprintf(asir_out,"inconsitent colstat; resetting...\n"); |
fflush(asir_out); |
fflush(asir_out); |
} |
} |
|
|
get_eg(&tmp1); |
get_eg(&tmp1); |
add_eg(&eg_gschk,&tmp0,&tmp1); |
add_eg(&eg_gschk,&tmp0,&tmp1); |
add_eg(&eg_gschk_split,&tmp0,&tmp1); |
add_eg(&eg_gschk_split,&tmp0,&tmp1); |
if ( Print ) { |
if ( DP_Print ) { |
print_eg("Mod",&eg_mod_split); |
print_eg("Mod",&eg_mod_split); |
print_eg("Elim",&eg_elim_split); |
print_eg("Elim",&eg_elim_split); |
print_eg("ChRem",&eg_chrem_split); |
print_eg("ChRem",&eg_chrem_split); |
Line 907 int **rindp,**cindp; |
|
Line 953 int **rindp,**cindp; |
|
row = mat->row; col = mat->col; |
row = mat->row; col = mat->col; |
w = (int **)almat(row,col); |
w = (int **)almat(row,col); |
for ( ind = 0; ; ind++ ) { |
for ( ind = 0; ; ind++ ) { |
md = lprime[ind]; |
md = get_lprime(ind); |
STOQ(md,mdq); |
STOQ(md,mdq); |
for ( i = 0; i < row; i++ ) |
for ( i = 0; i < row; i++ ) |
for ( j = 0, ai = a0[i], wi = w[i]; j < col; j++ ) |
for ( j = 0, ai = a0[i], wi = w[i]; j < col; j++ ) |