source: git/coeffs/numbers.cc @ 7d90aa

jengelh-datetimespielwiese
Last change on this file since 7d90aa was 7d90aa, checked in by Oleksandr Motsak <motsak@…>, 12 years ago
initial changes to 'coeffs' + first build system
  • Property mode set to 100644
File size: 16.9 KB
Line 
1/*****************************************
2*  Computer Algebra System SINGULAR      *
3*****************************************/
4/* $Id$ */
5
6/*
7* ABSTRACT: interface to coefficient aritmetics
8*/
9
10#include <string.h>
11#include <stdlib.h>
12#include "coeffs.h"
13#include "numbers.h"
14#include "longrat.h"
15#include "longalg.h"
16#include "modulop.h"
17#include "gnumpfl.h"
18#include "gnumpc.h"
19#include "ffields.h"
20#include "shortfl.h"
21#include "longtrans.h"
22#ifdef HAVE_RINGS
23#include <kernel/rmodulo2m.h>
24#include <kernel/rmodulon.h>
25#include <kernel/rintegers.h>
26
27extern omBin gmp_nrz_bin;
28#endif
29
30//static int characteristic = 0;
31extern int IsPrime(int p);
32
33/*0 implementation*/
34number nNULL; /* the 0 as constant */
35
36n_Procs_s *cf_root=NULL;
37
38void   nNew(number* d) { *d=NULL; }
39void   ndDelete(number* d, const coeffs r) { *d=NULL; }
40void   ndInpMult(number &a, number b, const coeffs r)
41{
42  number n=n_Mult(a,b,r);
43  n_Delete(&a,r);
44  a=n;
45}
46number ndInpAdd(number &a, number b, const coeffs r)
47{
48  number n=n_Add(a,b,r);
49  n_Delete(&a,r);
50  a=n;
51  return a;
52}
53
54#ifdef LDEBUG
55void   nDBDummy1(number* d,char *f, int l) { *d=NULL; }
56BOOLEAN ndDBTest(number a, const char *f, const int l)
57{
58  return TRUE;
59}
60#endif
61
62void   nDummy2(number& d, const coeffs r) { }
63
64char * ndName(number n, const coeffs r) { return NULL; }
65
66number ndPar(int i, const coeffs r) { return n_Init(0,r); }
67
68number ndReturn0(number n, const coeffs r) { return n_Init(0,r); }
69
70int    ndParDeg(number n, const coeffs r) { return 0; }
71
72number ndGcd(number a, number b, const coeffs r) { return n_Init(1,r); }
73
74number ndIntMod(number a, number b, const coeffs r) { return n_Init(0,r); }
75
76number ndGetDenom(number &n, const coeffs r) { return n_Init(1,r); }
77number ndGetNumerator(number &a,const coeffs r) { return n_Copy(a,r); }
78
79int ndSize(number a, const coeffs r) { return (int)n_IsZero(a,r)==FALSE; }
80
81number ndCopy(number a) { return a; }
82number nd_Copy(number a,const coeffs r) { return r->nCopy(a); }
83
84#ifdef HAVE_RINGS
85BOOLEAN ndDivBy(number a, number b) { return TRUE; } // assume a,b !=0
86int ndDivComp(number a, number b) { return 2; }
87BOOLEAN ndIsUnit(number a) { return !nIsZero(a); }
88number  ndExtGcd (number a, number b, number *s, number *t) { return nInit(1); }
89#endif
90
91/*2
92* init operations for characteristic c (complete==TRUE)
93* init nDelete    for characteristic c (complete==FALSE)
94*/
95void nSetChar(coeffs r)
96{
97  int c=rInternalChar(r);
98
99  /*--------------------- Q -----------------*/
100  if (nField_is_Q(r))
101  {
102    r->nInit_bigint=nl_Copy;
103  }
104  /*--------------------- Q_a/ Zp_a -----------------*/
105  else if (nField_is_Extension(r))
106  {
107    if (r->minpoly != NULL)
108    {
109      naSetChar(c,r);
110      if (rField_is_Q_a(r)) r->nInit_bigint=naMap00;
111      if (rField_is_Zp_a(r)) r->nInit_bigint=naMap0P;
112    }
113    else
114    {
115      ntSetChar(c,r);
116      if (rField_is_Q_a(r)) r->nInit_bigint=ntMap00;
117      if (rField_is_Zp_a(r)) r->nInit_bigint=ntMap0P;
118    }
119  }
120#ifdef HAVE_RINGS
121  /*----------------------ring Z / 2^m----------------*/
122  else if (nField_is_Ring_2toM(r))
123  {
124    nr2mSetExp(c, r);
125    r->nInit_bigint=nr2mMapQ;
126  }
127  /*----------------------ring Z ----------------*/
128  else if (nField_is_Ring_Z(r))
129  {
130    nrzSetExp(c, r);
131    r->nInit_bigint=nrzMapQ;
132  }
133  /*----------------------ring Z / n----------------*/
134  else if (nField_is_Ring_ModN(r))
135  {
136    nrnSetExp(c, r);
137    r->nInit_bigint=nrnMapQ;
138  }
139  /*----------------------ring Z / n----------------*/
140  else if (nField_is_Ring_PtoM(r))
141  {
142    nrnSetExp(c, r);
143    r->nInit_bigint=nrnMapQ;
144  }
145#endif
146  else if (nField_is_Zp(r))
147  /*----------------------char. p----------------*/
148  {
149    npSetChar(c, r);
150    r->nInit_bigint=npMap0;
151  }
152  /* -------------- GF(p^m) -----------------------*/
153  else if (nField_is_GF(r))
154  {
155    nfSetChar(c,r->parameter);
156    r->nInit_bigint=ndReturn0; // not impl.
157  }
158  /* -------------- R -----------------------*/
159  //if (c==(-1))
160  else if (nField_is_R(r))
161  {
162    r->nInit_bigint=nrMapQ;
163  }
164  /* -------------- long R -----------------------*/
165  /* -------------- long C -----------------------*/
166  else if ((nField_is_long_R(r))
167  || (nField_is_long_C(r)))
168  {
169    setGMPFloatDigits(r->float_len,r->float_len2);
170    if (nField_is_long_R(r)) r->nInit_bigint=ngfMapQ;
171    else                     r->nInit_bigint=ngcMapQ;
172  }
173#ifdef TEST
174  /* -------------- R -----------------------*/
175  //if (c==(-1))
176  else if (!nField_is_R(r) && !nField_is_Q(r))
177  {
178    WerrorS("unknown field");
179  }
180#endif
181}
182
183/*2
184* init operations for coeffs r
185*/
186void nInitChar(coeffs r)
187{
188  int c=nInternalChar(r);
189  n_coeffType t=nFieldType(r);
190
191  if (nField_is_Extension(r))
192  {
193    if (r->algring==NULL)
194    {
195      int ch=-c;
196      if (c==1) ch=0;
197      r->algring=(ring) rDefault(ch,r->P,r->parameter);
198      //r->algring->ShortOut=r->ShortOut;
199      // includes: nInitChar(r->algring);
200    }
201  }
202
203  n_coeffType t=rFieldType(r);
204  if ((r->cf!=NULL) && (r->cf->nChar==c) && (r->cf->type==t))
205  { r->cf->ref++; return; }
206
207  n_Procs_s *n=cf_root;
208  while((n!=NULL)
209    && ((n->nChar!=c) || (n->type!=t)))
210      n=n->next;
211  if (n==NULL)
212  {
213    n=(n_Procs_s*)omAlloc0(sizeof(n_Procs_s));
214    n->next=cf_root;
215    n->ref=1;
216    n->nChar=c;
217    n->type=t;
218    cf_root=n;
219  }
220  else if ((n->nChar==c) && (n->type==t))
221  {
222    n->ref++;
223    r=n;
224    return;
225  }
226  else
227  {
228    WerrorS("nInitChar failed");
229    return;
230  }
231  r=n;
232  n->nChar = c;
233  n->nPar  = ndPar;
234  n->nParDeg=ndParDeg;
235  n->nSize = ndSize;
236  n->cfGetDenom= ndGetDenom;
237  n->cfGetNumerator= ndGetNumerator;
238  n->nName =  ndName;
239  n->nImPart=ndReturn0;
240  n->cfDelete= ndDelete;
241  n->nInpMult=ndInpMult;
242  n->cfCopy=nd_Copy;
243  n->nIntMod=ndIntMod; /* dummy !! */
244  n->nNormalize=nDummy2;
245  n->nGcd  = ndGcd;
246  n->nLcm  = ndGcd; /* tricky, isn't it ?*/
247#ifdef HAVE_RINGS
248  n->nDivComp = ndDivComp;
249  n->nDivBy = ndDivBy;
250  n->nIsUnit = ndIsUnit;
251  n->nExtGcd = ndExtGcd;
252  n->nGetUnit = (nMapFunc)NULL;
253#endif
254  if (nField_is_Extension(r))
255  {
256    //naInitChar(c,TRUE,r);
257    n->cfDelete       = naDelete;
258    n->nNormalize     = naNormalize;
259    n->cfInit         = naInit;
260    n->nPar           = naPar;
261    n->nParDeg        = naParDeg;
262    n->n_Int          = naInt;
263    n->nAdd           = naAdd;
264    n->nSub           = naSub;
265    n->nMult          = naMult;
266    n->nDiv           = naDiv;
267    n->nExactDiv      = naDiv;
268    n->nIntDiv        = naIntDiv;
269    n->nNeg           = naNeg;
270    n->nInvers        = naInvers;
271    n->nCopy          = naCopy;
272    n->cfCopy         = na_Copy;
273    n->nGreater       = naGreater;
274    n->nEqual         = naEqual;
275    n->nIsZero        = naIsZero;
276    n->nIsOne         = naIsOne;
277    n->nIsMOne        = naIsMOne;
278    n->nGreaterZero   = naGreaterZero;
279    n->cfWrite        = naWrite;
280    n->nRead          = naRead;
281    n->nPower         = naPower;
282    n->nGcd           = naGcd;
283    n->nLcm           = naLcm;
284    n->cfSetMap       = naSetMap;
285    n->nName          = naName;
286    n->nSize          = naSize;
287    n->cfGetDenom     = napGetDenom;
288    n->cfGetNumerator = napGetNumerator;
289#ifdef LDEBUG
290    n->nDBTest        = naDBTest;
291#endif
292  }
293#ifdef HAVE_RINGS
294  /* -------------- Z/2^m ----------------------- */
295  else if (nField_is_Ring_2toM(r))
296  {
297     nr2mInitExp(c,r);
298     n->cfInit = nr2mInit;
299     n->nCopy  = nr2mCopy;
300     n->n_Int  = nr2mInt;
301     n->nAdd   = nr2mAdd;
302     n->nSub   = nr2mSub;
303     n->nMult  = nr2mMult;
304     n->nDiv   = nr2mDiv;
305     n->nIntDiv       = nr2mIntDiv;
306     n->nIntMod=nr2mMod;
307     n->nExactDiv= nr2mDiv;
308     n->nNeg   = nr2mNeg;
309     n->nInvers= nr2mInvers;
310     n->nDivBy = nr2mDivBy;
311     n->nDivComp = nr2mDivComp;
312     n->nGreater = nr2mGreater;
313     n->nEqual = nr2mEqual;
314     n->nIsZero = nr2mIsZero;
315     n->nIsOne = nr2mIsOne;
316     n->nIsMOne = nr2mIsMOne;
317     n->nGreaterZero = nr2mGreaterZero;
318     n->cfWrite = nr2mWrite;
319     n->nRead = nr2mRead;
320     n->nPower = nr2mPower;
321     n->cfSetMap = nr2mSetMap;
322     n->nNormalize = nDummy2;
323     n->nLcm          = nr2mLcm;
324     n->nGcd          = nr2mGcd;
325     n->nIsUnit = nr2mIsUnit;
326     n->nGetUnit = nr2mGetUnit;
327     n->nExtGcd = nr2mExtGcd;
328     n->nName= ndName;
329#ifdef LDEBUG
330     n->nDBTest=nr2mDBTest;
331#endif
332  }
333  /* -------------- Z/n ----------------------- */
334  else if (nField_is_Ring_ModN(r) || nField_is_Ring_PtoM(r)
335  )
336  {
337     nrnInitExp(c,r);
338     n->cfInit  = nrnInit;
339     n->cfDelete= nrnDelete;
340     n->nCopy  = nrnCopy;
341     n->cfCopy = cfrnCopy;
342     n->nSize  = nrnSize;
343     n->n_Int  = nrnInt;
344     n->nAdd   = nrnAdd;
345     n->nSub   = nrnSub;
346     n->nMult  = nrnMult;
347     n->nDiv   = nrnDiv;
348     n->nIntDiv= nrnIntDiv;
349     n->nIntMod= nrnMod;
350     n->nExactDiv= nrnDiv;
351     n->nNeg   = nrnNeg;
352     n->nInvers= nrnInvers;
353     n->nDivBy = nrnDivBy;
354     n->nDivComp = nrnDivComp;
355     n->nGreater = nrnGreater;
356     n->nEqual = nrnEqual;
357     n->nIsZero = nrnIsZero;
358     n->nIsOne = nrnIsOne;
359     n->nIsMOne = nrnIsMOne;
360     n->nGreaterZero = nrnGreaterZero;
361     n->cfWrite = nrnWrite;
362     n->nRead = nrnRead;
363     n->nPower = nrnPower;
364     n->cfSetMap = nrnSetMap;
365     n->nNormalize = nDummy2;
366     n->nLcm          = nrnLcm;
367     n->nGcd          = nrnGcd;
368     n->nIsUnit = nrnIsUnit;
369     n->nGetUnit = nrnGetUnit;
370     n->nExtGcd = nrnExtGcd;
371     n->nName= ndName;
372#ifdef LDEBUG
373     n->nDBTest=nrnDBTest;
374#endif
375  }
376  /* -------------- Z ----------------------- */
377  else if (nField_is_Ring_Z(r))
378  {
379     n->cfInit  = nrzInit;
380     n->cfDelete= nrzDelete;
381     n->nCopy  = nrzCopy;
382     n->cfCopy = cfrzCopy;
383     n->nSize  = nrzSize;
384     n->n_Int  = nrzInt;
385     n->nAdd   = nrzAdd;
386     n->nSub   = nrzSub;
387     n->nMult  = nrzMult;
388     n->nDiv   = nrzDiv;
389     n->nIntDiv = nrzIntDiv;
390     n->nIntMod = nrzIntMod;
391     n->nExactDiv= nrzDiv;
392     n->nNeg   = nrzNeg;
393     n->nInvers= nrzInvers;
394     n->nDivBy = nrzDivBy;
395     n->nDivComp = nrzDivComp;
396     n->nGreater = nrzGreater;
397     n->nEqual = nrzEqual;
398     n->nIsZero = nrzIsZero;
399     n->nIsOne = nrzIsOne;
400     n->nIsMOne = nrzIsMOne;
401     n->nGreaterZero = nrzGreaterZero;
402     n->cfWrite = nrzWrite;
403     n->nRead = nrzRead;
404     n->nPower = nrzPower;
405     n->cfSetMap = nrzSetMap;
406     n->nNormalize = nDummy2;
407     n->nLcm          = nrzLcm;
408     n->nGcd          = nrzGcd;
409     n->nIsUnit = nrzIsUnit;
410     n->nGetUnit = nrzGetUnit;
411     n->nExtGcd = nrzExtGcd;
412     n->nName= ndName;
413#ifdef LDEBUG
414     n->nDBTest=ndDBTest; // not yet implemented: nrzDBTest;
415#endif
416  }
417#endif
418  else if (nField_is_Q(r))
419  {
420    n->cfDelete= nlDelete;
421    n->nNormalize=nlNormalize;
422    n->cfInit = nlInit;
423    n->n_Int  = nlInt;
424    n->nAdd   = nlAdd;
425    n->nSub   = nlSub;
426    n->nMult  = nlMult;
427    n->nInpMult=nlInpMult;
428    n->nDiv   = nlDiv;
429    n->nExactDiv= nlExactDiv;
430    n->nIntDiv= nlIntDiv;
431    n->nIntMod= nlIntMod;
432    n->nNeg   = nlNeg;
433    n->nInvers= nlInvers;
434    n->nCopy  = nlCopy;
435    n->nGreater = nlGreater;
436    n->nEqual = nlEqual;
437    n->nIsZero = nlIsZero;
438    n->nIsOne = nlIsOne;
439    n->nIsMOne = nlIsMOne;
440    n->nGreaterZero = nlGreaterZero;
441    n->cfWrite = nlWrite;
442    n->nRead = nlRead;
443    n->nPower = nlPower;
444    n->nGcd  = nlGcd;
445    n->nLcm  = nlLcm;
446    n->cfSetMap = nlSetMap;
447    n->nSize  = nlSize;
448    n->cfGetDenom = nlGetDenom;
449    n->cfGetNumerator = nlGetNumerator;
450#ifdef LDEBUG
451    n->nDBTest=nlDBTest;
452#endif
453  }
454  else if (nField_is_Zp(r))
455  /*----------------------char. p----------------*/
456  {
457    npInitChar(c,r);
458    n->cfInit = npInit;
459    n->n_Int  = npInt;
460    n->nAdd   = npAdd;
461    n->nSub   = npSub;
462    n->nMult  = npMult;
463    n->nDiv   = npDiv;
464    n->nExactDiv= npDiv;
465    n->nNeg   = npNeg;
466    n->nInvers= npInvers;
467    n->nCopy  = ndCopy;
468    n->nGreater = npGreater;
469    n->nEqual = npEqual;
470    n->nIsZero = npIsZero;
471    n->nIsOne = npIsOne;
472    n->nIsMOne = npIsMOne;
473    n->nGreaterZero = npGreaterZero;
474    n->cfWrite = npWrite;
475    n->nRead = npRead;
476    n->nPower = npPower;
477    n->cfSetMap = npSetMap;
478    /* nName= ndName; */
479    /*nSize  = ndSize;*/
480#ifdef LDEBUG
481    n->nDBTest=npDBTest;
482#endif
483#ifdef NV_OPS
484    if (c>NV_MAX_PRIME)
485    {
486      n->nMult  = nvMult;
487      n->nDiv   = nvDiv;
488      n->nExactDiv= nvDiv;
489      n->nInvers= nvInvers;
490      n->nPower= nvPower;
491      n->nInpMult= nvInpMult;
492    }
493#endif
494  }
495  /* -------------- GF(p^m) -----------------------*/
496  else if (nField_is_GF(r))
497  {
498    //nfSetChar(c,r->parameter);
499    n->cfInit = nfInit;
500    n->nPar   = nfPar;
501    n->nParDeg= nfParDeg;
502    n->n_Int  = nfInt;
503    n->nAdd   = nfAdd;
504    n->nSub   = nfSub;
505    n->nMult  = nfMult;
506    n->nDiv   = nfDiv;
507    n->nExactDiv= nfDiv;
508    n->nNeg   = nfNeg;
509    n->nInvers= nfInvers;
510    n->nCopy  = ndCopy;
511    n->nGreater = nfGreater;
512    n->nEqual = nfEqual;
513    n->nIsZero = nfIsZero;
514    n->nIsOne = nfIsOne;
515    n->nIsMOne = nfIsMOne;
516    n->nGreaterZero = nfGreaterZero;
517    n->cfWrite = nfWrite;
518    n->nRead = nfRead;
519    n->nPower = nfPower;
520    n->cfSetMap = nfSetMap;
521    n->nName= nfName;
522    /*nSize  = ndSize;*/
523#ifdef LDEBUG
524    n->nDBTest=nfDBTest;
525#endif
526  }
527  /* -------------- R -----------------------*/
528  //if (c==(-1))
529  else if (nField_is_R(r))
530  {
531    n->cfInit = nrInit;
532    n->n_Int  = nrInt;
533    n->nAdd   = nrAdd;
534    n->nSub   = nrSub;
535    n->nMult  = nrMult;
536    n->nDiv   = nrDiv;
537    n->nExactDiv= nrDiv;
538    n->nNeg   = nrNeg;
539    n->nInvers= nrInvers;
540    n->nCopy  = ndCopy;
541    n->nGreater = nrGreater;
542    n->nEqual = nrEqual;
543    n->nIsZero = nrIsZero;
544    n->nIsOne = nrIsOne;
545    n->nIsMOne = nrIsMOne;
546    n->nGreaterZero = nrGreaterZero;
547    n->cfWrite = nrWrite;
548    n->nRead = nrRead;
549    n->nPower = nrPower;
550    n->cfSetMap=nrSetMap;
551    /* nName= ndName; */
552    n->nSize = nrSize;
553#ifdef LDEBUG
554    n->nDBTest=ndDBTest; // not yet implemented: nrDBTest;
555#endif
556  }
557  /* -------------- long R -----------------------*/
558  else if (nField_is_long_R(r))
559  {
560    n->cfDelete= ngfDelete;
561    n->cfInit = ngfInit;
562    n->n_Int  = ngfInt;
563    n->nAdd   = ngfAdd;
564    n->nSub   = ngfSub;
565    n->nMult  = ngfMult;
566    n->nDiv   = ngfDiv;
567    n->nExactDiv= ngfDiv;
568    n->nNeg   = ngfNeg;
569    n->nInvers= ngfInvers;
570    n->nCopy  = ngfCopy;
571    n->nGreater = ngfGreater;
572    n->nEqual = ngfEqual;
573    n->nIsZero = ngfIsZero;
574    n->nIsOne = ngfIsOne;
575    n->nIsMOne = ngfIsMOne;
576    n->nGreaterZero = ngfGreaterZero;
577    n->cfWrite = ngfWrite;
578    n->nRead = ngfRead;
579    n->nPower = ngfPower;
580    n->cfSetMap=ngfSetMap;
581    n->nName= ndName;
582    n->nSize  = ngfSize;
583#ifdef LDEBUG
584    n->nDBTest=ndDBTest; // not yet implemented: ngfDBTest
585#endif
586  }
587  /* -------------- long C -----------------------*/
588  else if (nField_is_long_C(r))
589  {
590    n->cfDelete= ngcDelete;
591    n->nNormalize=nDummy2;
592    n->cfInit = ngcInit;
593    n->n_Int  = ngcInt;
594    n->nAdd   = ngcAdd;
595    n->nSub   = ngcSub;
596    n->nMult  = ngcMult;
597    n->nDiv   = ngcDiv;
598    n->nExactDiv= ngcDiv;
599    n->nNeg   = ngcNeg;
600    n->nInvers= ngcInvers;
601    n->nCopy  = ngcCopy;
602    n->nGreater = ngcGreater;
603    n->nEqual = ngcEqual;
604    n->nIsZero = ngcIsZero;
605    n->nIsOne = ngcIsOne;
606    n->nIsMOne = ngcIsMOne;
607    n->nGreaterZero = ngcGreaterZero;
608    n->cfWrite = ngcWrite;
609    n->nRead = ngcRead;
610    n->nPower = ngcPower;
611    n->cfSetMap=ngcSetMap;
612    n->nPar=ngcPar;
613    n->nRePart=ngcRePart;
614    n->nImPart=ngcImPart;
615    n->nSize = ngcSize;
616#ifdef LDEBUG
617    n->nDBTest=ndDBTest; // not yet implemented: ngcDBTest
618#endif
619  }
620#ifdef TEST
621  else
622  {
623    WerrorS("unknown field");
624  }
625#endif
626#ifdef HAVE_RINGS
627  if (n->nGetUnit==(nMapFunc)NULL) n->nGetUnit=n->nCopy;
628#endif
629  if (!errorreported)
630  {
631    n->nNULL=n->cfInit(0,r);
632    if (n->nRePart==NULL)
633      n->nRePart=n->cfCopy;
634    if (n->nIntDiv==NULL)
635      n->nIntDiv=n->nDiv;
636  }
637}
638
639void nKillChar(coeffs r)
640{
641  if (r!=NULL)
642  {
643    r->ref--;
644    if (r->ref<=0)
645    {
646      n_Procs_s tmp;
647      n_Procs_s* n=&tmp;
648      tmp.next=cf_root;
649      while((n->next!=NULL) && (n->next!=r)) n=n->next;
650      if (n->next==r)
651      {
652        n->next=n->next->next;
653        if (cf_root==r) cf_root=n->next;
654        r->cfDelete(&(r->nNULL),r);
655        switch(r->type)
656        {
657          case n_Zp:
658               #ifdef HAVE_DIV_MOD
659               if (r->npInvTable!=NULL)
660               omFreeSize( (void *)r->npInvTable,
661                           r->npPrimeM*sizeof(unsigned short) );
662               #else
663               if (r->npExpTable!=NULL)
664               {
665                 omFreeSize( (void *)r->npExpTable,
666                             r->npPrimeM*sizeof(unsigned short) );
667                 omFreeSize( (void *)r->npLogTable,
668                             r->npPrimeM*sizeof(unsigned short) );
669               }
670               #endif
671               break;
672          case n_Zp_a:
673          case n_Q_a:
674               {
675                 number n=r->minpoly;
676                 if (n!=NULL)
677                 {
678                   r->minpoly=NULL;
679                   naDelete(&n,r);
680                 }
681               }
682               break;
683
684            default:
685                 break;
686          }
687          omFreeSize((void *)r, sizeof(n_Procs_s));
688          r=NULL;
689        }
690        else
691        {
692          WarnS("cf_root list destroyed");
693        }
694      }
695      r->cf=NULL;
696    }
697    //if (r->algring!=NULL)
698    //{
699    //  rKill(r->algring);
700    //  r->algring=NULL;
701    //}
702  }
703}
Note: See TracBrowser for help on using the repository browser.