source: git/kernel/prCopy.cc @ 1e579c6

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