source: git/libpolys/polys/prCopy.cc @ 805d0b1

spielwiese
Last change on this file since 805d0b1 was 691dba, checked in by Oleksandr Motsak <motsak@…>, 13 years ago
FIX: use #include "config.h" everywhere
  • Property mode set to 100644
File size: 5.7 KB
Line 
1/****************************************
2*  Computer Algebra System SINGULAR     *
3****************************************/
4/* $Id$ */
5/*
6* ABSTRACT - implementation of functions for Copy/Move/Delete for Polys
7*/
8
9#include "config.h"
10#include <omalloc/omalloc.h>
11#include <polys/monomials/ring.h>
12#include <polys/monomials/p_polys.h>
13#include <coeffs/numbers.h>
14#include <polys/monomials/ring.h>
15#include <polys/simpleideals.h>
16// #include <polys/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 <polys/prCopy.inc>
33
34/////////////////////////////////////////////////////////////////////////
35poly prCopyR(poly p, ring src_r, ring dest_r)
36{
37  poly res;
38  if (rField_has_simple_Alloc(dest_r))
39    res =  pr_Copy_NoREqual_NSimple_Sort(p, src_r, dest_r);
40  else
41    res =  pr_Copy_NoREqual_NoNSimple_Sort(p, src_r, dest_r);
42  p_Test(res, dest_r);
43  return res;
44}
45
46poly prCopyR_NoSort(poly p, ring src_r, ring dest_r)
47{
48  poly res;
49  if (rField_has_simple_Alloc(dest_r))
50    res =  pr_Copy_NoREqual_NSimple_NoSort(p, src_r, dest_r);
51  else
52    res =  pr_Copy_NoREqual_NoNSimple_NoSort(p, src_r, dest_r);
53  p_Test(res, dest_r);
54  return res;
55}
56
57/////////////////////////////////////////////////////////////////////////
58// prMove
59poly prMoveR(poly &p, ring src_r, ring dest_r)
60{
61  poly res;
62  if (rField_has_simple_Alloc(dest_r))
63    res =  pr_Move_NoREqual_NSimple_Sort(p, src_r, dest_r);
64  else
65    res =  pr_Move_NoREqual_NoNSimple_Sort(p, src_r, dest_r);
66  p_Test(res, dest_r);
67  return res;
68}
69
70poly prMoveR_NoSort(poly &p, ring src_r, ring dest_r)
71{
72  poly res;
73  if (rField_has_simple_Alloc(dest_r))
74    res =  pr_Move_NoREqual_NSimple_NoSort(p, src_r, dest_r);
75  else
76    res =  pr_Move_NoREqual_NoNSimple_NoSort(p, src_r, dest_r);
77  p_Test(res, dest_r);
78  return res;
79}
80
81poly prShallowCopyR_NoSort(poly p, ring r, ring dest_r)
82{
83  return pr_Copy_NoREqual_NSimple_NoSort(p, r, dest_r);
84}
85
86poly prShallowCopyR(poly p, ring r, ring dest_r)
87{
88  return pr_Copy_NoREqual_NSimple_Sort(p, r, dest_r);
89}
90
91/////////////////////////////////////////////////////////////////////////
92// prHead
93typedef poly (*prCopyProc_t)(poly &src_p, ring src_r, ring dest_r);
94
95poly prHeadR(poly p, ring src_r, ring dest_r, prCopyProc_t prproc)
96{
97  if (p == NULL) return NULL;
98  poly tail, head, q = p;
99  tail = pNext(p);
100  pNext(p) = NULL;
101  head = prproc(q, src_r, dest_r);
102  pNext(p) = tail;
103
104  p_Test(p, src_r);
105  p_Test(head, dest_r);
106
107  return head;
108}
109
110poly prHeadR(poly p, ring src_r, ring dest_r)
111{
112  prCopyProc_t prproc;
113  if (rField_has_simple_Alloc(dest_r))
114    prproc = pr_Copy_NoREqual_NSimple_NoSort;
115  else
116    prproc = pr_Copy_NoREqual_NoNSimple_NoSort;
117
118  const poly res = prHeadR(p, src_r, dest_r, prproc);
119  p_Test(res, dest_r);
120  return res;
121}
122
123/////////////////////////////////////////////////////////////////////////
124/// Copy leading terms of id[i] via prHeeadR into dest_r
125ideal idrHeadR(ideal id, ring r, ring dest_r)
126{
127  if (id == NULL) return NULL;
128
129  prCopyProc_t prproc = pr_Copy_NoREqual_NoNSimple_NoSort;
130  if (rField_has_simple_Alloc(dest_r))
131    prproc = pr_Copy_NoREqual_NSimple_NoSort;
132
133  const int N = IDELEMS(id);
134  ideal res = idInit(N, id->rank);
135
136  for (int i = N - 1; i >= 0; i--)
137    res->m[i] = prHeadR(id->m[i], r, dest_r, prproc); // !!!
138
139  return res;
140}
141
142
143static inline ideal
144idrCopy(ideal id, ring src_r, ring dest_r, prCopyProc_t prproc)
145{
146  if (id == NULL) return NULL;
147  poly p;
148  ideal res = idInit(IDELEMS(id), id->rank);
149  int i;
150
151  for (i=IDELEMS(id)-1; i>=0; i--)
152  {
153    p = id->m[i];
154    res->m[i] = prproc(p, src_r, dest_r);
155    p_Test(res->m[i], dest_r);
156  }
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
235
Note: See TracBrowser for help on using the repository browser.