source: git/kernel/prCopy.cc @ a41f3aa

spielwiese
Last change on this file since a41f3aa was c985c5, checked in by Hans Schönemann <hannes@…>, 17 years ago
*hannes: fix bug 48(exp bound for maps) git-svn-id: file:///usr/local/Singular/svn/trunk@10307 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 5.7 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/* $Id: prCopy.cc,v 1.3 2007-09-17 08:33:17 Singular Exp $ */
5/*
6* ABSTRACT - implementation of functions for Copy/Move/Delete for Polys
7*/
8
9#include "mod2.h"
10#include "omalloc.h"
11#include "p_polys.h"
12#include "numbers.h"
13#include "structs.h"
14#include "ring.h"
15#include "ideals.h"
16#include "sbuckets.h"
17
18static inline void
19prCopyEvector(poly dest, ring dest_r, poly src, ring src_r,int max)
20{
21  //memset(dest->exp,0,dest_r->ExpL_Size*sizeof(long));
22  int i;
23  for (i=max; i>0; i--)
24  {
25    p_SetExp(dest, i, p_GetExp( src, i,src_r), dest_r);
26  }
27  if (rRing_has_Comp(dest_r) && rRing_has_Comp(src_r))
28    p_SetComp(dest, p_GetComp( src,src_r), dest_r);
29  p_Setm(dest, dest_r);
30}
31
32#include "prCopy.inc"
33
34/////////////////////////////////////////////////////////////////////////
35// prCopy
36poly prCopy(poly p, ring dest_r)
37{
38  poly res;
39  if (rField_has_simple_Alloc(dest_r))
40    res = pr_Copy_REqual_NSimple_NoSort(p, dest_r, dest_r);
41  else
42    res = pr_Copy_REqual_NoNSimple_NoSort(p, dest_r, dest_r);
43  p_Test(res, dest_r);
44  return res;
45}
46
47poly prCopyR(poly p, ring src_r, ring dest_r)
48{
49  poly res;
50  if (rField_has_simple_Alloc(dest_r))
51    res =  pr_Copy_NoREqual_NSimple_Sort(p, src_r, dest_r);
52  else
53    res =  pr_Copy_NoREqual_NoNSimple_Sort(p, src_r, dest_r);
54  p_Test(res, dest_r);
55  return res;
56}
57
58poly prCopyR_NoSort(poly p, ring src_r, ring dest_r)
59{
60  poly res;
61  if (rField_has_simple_Alloc(dest_r))
62    res =  pr_Copy_NoREqual_NSimple_NoSort(p, src_r, dest_r);
63  else
64    res =  pr_Copy_NoREqual_NoNSimple_NoSort(p, src_r, dest_r);
65  p_Test(res, dest_r);
66  return res;
67}
68
69/////////////////////////////////////////////////////////////////////////
70// prMove
71poly prMoveR(poly &p, ring src_r, ring dest_r)
72{
73  poly res;
74  if (rField_has_simple_Alloc(dest_r))
75    res =  pr_Move_NoREqual_NSimple_Sort(p, src_r, dest_r);
76  else
77    res =  pr_Move_NoREqual_NoNSimple_Sort(p, src_r, dest_r);
78  p_Test(res, dest_r);
79  return res;
80}
81
82poly prMoveR_NoSort(poly &p, ring src_r, ring dest_r)
83{
84  poly res;
85  if (rField_has_simple_Alloc(dest_r))
86    res =  pr_Move_NoREqual_NSimple_NoSort(p, src_r, dest_r);
87  else
88    res =  pr_Move_NoREqual_NoNSimple_NoSort(p, src_r, dest_r);
89  p_Test(res, dest_r); 
90  return res;
91}
92
93poly prShallowCopyR_NoSort(poly p, ring r, ring dest_r)
94{
95  return pr_Copy_NoREqual_NSimple_NoSort(p, r, dest_r);
96}
97
98poly prShallowCopyR(poly p, ring r, ring dest_r = currRing)
99{
100  return pr_Copy_NoREqual_NSimple_Sort(p, r, dest_r);
101}
102
103/////////////////////////////////////////////////////////////////////////
104// prHead
105typedef poly (*prCopyProc_t)(poly &src_p, ring src_r, ring dest_r);
106
107poly prHeadR(poly p, ring src_r, ring dest_r, prCopyProc_t prproc)
108{
109  if (p == NULL) return NULL;
110  poly tail, head, q = p;
111  tail = pNext(p);
112  pNext(p) = NULL;
113  head = prproc(q, src_r, dest_r);
114  pNext(p) = tail;
115  return head;
116}
117
118poly prHeadR(poly p, ring src_r, ring dest_r)
119{
120  prCopyProc_t prproc;
121  if (rField_has_simple_Alloc(dest_r)) 
122    prproc = pr_Copy_NoREqual_NSimple_NoSort;
123  else
124    prproc = pr_Copy_NoREqual_NoNSimple_NoSort; 
125 
126  return prHeadR(p, src_r, dest_r, prproc);
127}
128
129/////////////////////////////////////////////////////////////////////////
130// idrCopy
131static inline ideal
132idrCopy(ideal id, ring src_r, ring dest_r, prCopyProc_t prproc)
133{
134  if (id == NULL) return NULL;
135  poly p;
136  ideal res = idInit(IDELEMS(id), id->rank);
137  int i;
138
139  for (i=IDELEMS(id)-1; i>=0; i--)
140  {
141    p = id->m[i];
142    res->m[i] = prproc(p, src_r, dest_r);
143    p_Test(res->m[i], dest_r);
144  }
145  return res;
146}
147
148ideal idrCopy(ideal id, ring dest_r)
149{
150  ideal res;
151  prCopyProc_t prproc;
152  if (rField_has_simple_Alloc(dest_r)) 
153    prproc = pr_Copy_REqual_NSimple_NoSort;
154  else
155    prproc = pr_Copy_REqual_NoNSimple_NoSort;
156  res =  idrCopy(id, dest_r, dest_r, prproc);
157  return res;
158}
159
160ideal idrCopyR(ideal id, ring src_r, ring dest_r)
161{
162  ideal res;
163  prCopyProc_t prproc;
164  if (rField_has_simple_Alloc(dest_r)) 
165    prproc = pr_Copy_NoREqual_NSimple_Sort;
166  else
167    prproc = pr_Copy_NoREqual_NoNSimple_Sort;
168  res =  idrCopy(id, src_r, dest_r, prproc);
169  return res;
170}
171 
172ideal idrCopyR_NoSort(ideal id, ring src_r, ring dest_r)
173{
174  ideal res;
175  prCopyProc_t prproc;
176  if (rField_has_simple_Alloc(dest_r)) 
177    prproc = pr_Copy_NoREqual_NSimple_NoSort;
178  else
179    prproc = pr_Copy_NoREqual_NoNSimple_NoSort;
180  res =  idrCopy(id, src_r, dest_r, prproc);
181  return res;
182}
183
184/////////////////////////////////////////////////////////////////////////
185// idrShallowCopy
186ideal idrShallowCopyR(ideal id, ring src_r, ring dest_r)
187{
188  return idrCopy(id, src_r, dest_r, pr_Copy_NoREqual_NSimple_Sort);
189}
190 
191ideal idrShallowCopyR_NoSort(ideal id, ring src_r, ring dest_r)
192{
193  return idrCopy(id, src_r, dest_r, pr_Copy_NoREqual_NSimple_NoSort);
194}
195 
196/////////////////////////////////////////////////////////////////////////
197// idrMove
198static inline ideal
199idrMove(ideal &id, ring src_r, ring dest_r, prCopyProc_t prproc)
200{
201  if (id == NULL) return NULL;
202  ideal res = id;
203
204  int i;
205  for (i=IDELEMS(id)-1; i>=0; i--)
206    res->m[i] = prproc(id->m[i], src_r, dest_r);
207  id = NULL;
208  return res;
209}
210
211ideal idrMoveR(ideal &id, ring src_r, ring dest_r)
212{
213  prCopyProc_t prproc;
214  ideal res;
215  if (rField_has_simple_Alloc(dest_r)) 
216    prproc = pr_Move_NoREqual_NSimple_Sort;
217  else
218    prproc = pr_Move_NoREqual_NoNSimple_Sort;
219  res =  idrMove(id, src_r, dest_r, prproc);
220  return res;
221}
222 
223ideal idrMoveR_NoSort(ideal &id, ring src_r, ring dest_r)
224{
225  prCopyProc_t prproc;
226  ideal res;
227  if (rField_has_simple_Alloc(dest_r)) 
228    prproc = pr_Move_NoREqual_NSimple_NoSort;
229  else
230    prproc = pr_Move_NoREqual_NoNSimple_NoSort;
231  res =  idrMove(id, src_r, dest_r, prproc);
232  return res;
233}
234
Note: See TracBrowser for help on using the repository browser.