=================================================================== RCS file: /home/cvs/OpenXM/src/ox_ntl/ntl.cpp,v retrieving revision 1.2 retrieving revision 1.7 diff -u -p -r1.2 -r1.7 --- OpenXM/src/ox_ntl/ntl.cpp 2003/11/08 12:34:00 1.2 +++ OpenXM/src/ox_ntl/ntl.cpp 2013/10/18 01:28:52 1.7 @@ -1,6 +1,7 @@ -/* $OpenXM: OpenXM/src/ox_ntl/ntl.cpp,v 1.1 2003/11/03 03:11:21 iwane Exp $ */ +/* $OpenXM: OpenXM/src/ox_ntl/ntl.cpp,v 1.6 2008/09/19 10:55:40 iwane Exp $ */ #include +#include #include "ox_toolkit.h" #include "ntl.h" @@ -9,6 +10,8 @@ #define __NTL_PRINT (1) #endif +#define DPRINTF(x) printf x; fflush(stdout) + /**************************************************************************** * * Factorize polynomial over the integers. @@ -21,60 +24,130 @@ : [2,[[x-1,1],[x^4+x^3+x^2+x+1,1],[x+1,2],[x^2-x+1,2]]] * ****************************************************************************/ -cmo * -ntl_fctr(cmo **arg, int argc) +oxstack_node * +ntl_fctr(oxstack_node **arg, int argc) { - cmo *poly = arg[0]; + oxstack_node *p = arg[0]; + cmo *poly = p->c; cmo_indeterminate *x; + cmo *err; ZZX f; - ZZ c; - int ret; + char emss[25] = "Invalid Parameter(#)"; + char emst[25] = "Invalid Parameter(type)"; - vec_pair_ZZX_long factors; - - cmo_list *ans; - cmo *fcts; - if (argc != 1) { - return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(#)"))); + err = ((cmo *)new_cmo_error2((cmo *)new_cmo_string(emss))); + p = oxstack_node_init(err); + return (p); } ret = cmo_to_ZZX(f, poly, x); if (ret != NTL_SUCCESS) { /* format error */ - return ((cmo *)new_cmo_error2((cmo *)new_cmo_string("Invalid Parameter(type)"))); + err = (cmo *)new_cmo_error2((cmo *)new_cmo_string(emst)); + p = oxstack_node_init(err); + return (p); } #if __NTL_PRINT - cout << "input: " << f << endl; + std::cout << "input: " << f << std::endl; #endif - factor(c, factors, f); + cmon_factors_t *factors = new_cmon_factors(); + factors->x = x; + factor(*factors->cont, *factors->f, f); + #if __NTL_PRINT - cout << "fctr : " << factors << endl; + std::cout << "fctr : " << *factors->f << std::endl; #endif - cmo_zz *zz = ZZ_to_cmo_zz(c); + p = oxstack_node_init(NULL); + p->p = factors; - ans = new_cmo_list(); + return (p); +} - fcts = (cmo *)vec_pair_ZZX_long_to_cmo(factors, x); +/**************************************************************************** + * + * Factorize polynomial over the integers. + * + * PARAM : I : arg : polynomial + * : I : argc : + * RETURN: [num,[[factor1,multiplicity1],[factor2,multiplicity2],...]] + * + * EX : ntl_fctr([2*x^11+4*x^8-2*x^6+2*x^5-4*x^3-2],1) ==> + : [2,[[x-1,1],[x^4+x^3+x^2+x+1,1],[x+1,2],[x^2-x+1,2]]] + * + ****************************************************************************/ +oxstack_node * +ntl_lll(oxstack_node **arg, int argc) +{ + oxstack_node *p = arg[0]; + cmo *err; + ZZX f; + int ret; + cmon_mat_zz_t *mat; + char emss[25] = "Invalid Parameter(#)"; + char emst[25] = "Invalid Parameter(type)"; - list_appendl(ans, zz, (cmo *)fcts, NULL); + if (argc != 1) { + err = ((cmo *)new_cmo_error2((cmo *)new_cmo_string(emss))); + p = oxstack_node_init(err); + return (p); + } - return ((cmo *)ans); + mat = new_cmon_mat_zz(); + ret = cmo_to_mat_zz(*mat->mat, p->c); + if (ret != NTL_SUCCESS) { + delete_cmon_mat_zz(mat); + /* format error */ + err = ((cmo *)new_cmo_error2((cmo *)new_cmo_string(emst))); + p = oxstack_node_init(err); + return (p); + } + +#if __NTL_PRINT + std::cout << "input: " << (*mat->mat) << std::endl; +#endif + + ZZ det2; + mat_ZZ U; + +#if __NTL_PRINT + std::cout << "output: " << (*mat->mat) << std::endl; + std::cout << U <p = mat; + return (p); } -#if __NTL_DEBUG +#if __NTL_DEBUG /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + +#include +#include + +void ntl_free(void *ptr, size_t size) {} + +void *ntl_realloc(void *org, size_t old, size_t size) +{ + void *ptr = GC_realloc(org, size); + return (ptr); +} + + int main(int argc, char *argv[]) { +#if 0 +{ ZZX f; - const char *str = "[1 -1 -1 1]"; + const char *str = "12345"; int num = 1; char *var = "x"; cmo *c; @@ -88,9 +161,49 @@ main(int argc, char *argv[]) arg[0] = (cmo *)poly; c = ntl_fctr(arg, num); +} +#endif +{ + + ZZ cont; + ZZX fac; + vec_pair_ZZX_long facs; +// char xx[2] = "x"; +// cmo_indeterminate *x = new_cmo_indeterminate((cmo *)new_cmo_string(xx)); + +// std::istringstream istr("[3 -3 -6]"); +// istr >> fac; + + SetCoeff(fac, 0, 3); + SetCoeff(fac, 1, -3); + SetCoeff(fac, 2, -6); + + + factor(cont, facs, fac); + + // mpz_clear(ppp->mpz); +} + +if (0) { + mp_set_memory_functions(GC_malloc, ntl_realloc, ntl_free); + for (int i = 0;; i++) { + +// cmon_factors_t *mat = new_cmon_factors(cont, facs, x); +// cmo *aaa = convert_cmon((cmo *)mat); +// delete_cmon((cmo *)mat); + + if (i % 1000 == 0) { + printf("GC-counts: %lu, size: %u\n", GC_gc_no, GC_get_heap_size()); + GC_gcollect(); + usleep(1); + } + } +} + + return (0); } -#endif +#endif /* __NTL_DEBUG @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/