Main Page
Related Pages
Data Structures
Files
File List
Globals
kernel
spectrum
multicnt.cc
Go to the documentation of this file.
1
// ----------------------------------------------------------------------------
2
// multicnt.cc
3
// begin of file
4
// Stephan Endrass, endrass@mathematik.uni-mainz.de
5
// 23.7.99
6
// ----------------------------------------------------------------------------
7
8
#define MULTICNT_CC
9
10
11
12
13
#include <
kernel/mod2.h
>
14
15
#ifdef HAVE_SPECTRUM
16
17
#include <stdlib.h>
18
19
#ifdef MULTICNT_PRINT
20
#include <iostream.h>
21
#ifndef MULTICNT_IOSTREAM
22
#include <stdio.h>
23
#endif
24
#endif
25
26
#include <
kernel/spectrum/multicnt.h
>
27
28
// ----------------------------------------------------------------------------
29
// allocate counter memory
30
// ----------------------------------------------------------------------------
31
32
void
multiCnt::copy_new
(
int
n
)
33
{
34
if
( n > 0 )
35
{
36
cnt
=
new
int
[
n
];
37
38
#ifndef SING_NDEBUG
39
if
(
cnt
== (
int
*)
NULL
)
40
{
41
#ifdef MULTICNT_PRINT
42
#ifdef MULTICNT_IOSTREAM
43
cerr <<
"multiCnt::copy_new("
<< n <<
")"
<< endl;
44
cerr <<
" returned ZERO!!!"
<< endl;
45
cerr <<
" exit..."
<< endl;
46
#else
47
fprintf( stderr,
"multiCnt::copy_new( %d )\n"
,n );
48
fprintf( stderr,
" returned ZERO!!!\n"
);
49
fprintf( stderr,
" exit...\n"
);
50
#endif
51
#endif
52
53
exit( 1 );
54
}
55
#endif
56
}
57
else
if
( n == 0 )
58
{
59
cnt
= (
int
*)
NULL
;
60
}
61
else
62
{
63
#ifdef MULTICNT_PRINT
64
#ifdef MULTICNT_IOSTREAM
65
cerr <<
"multiCnt::copy_new("
<< n <<
")"
<< endl;
66
cerr <<
" exit..."
<< endl;
67
#else
68
fprintf( stderr,
"multiCnt::copy_new( %d )\n"
,n );
69
fprintf( stderr,
" exit...\n"
);
70
#endif
71
#endif
72
73
exit( 1 );
74
}
75
}
76
77
// ----------------------------------------------------------------------------
78
// delete counter memory
79
// ----------------------------------------------------------------------------
80
81
void
multiCnt::copy_delete
(
void
)
82
{
83
if
(
N
>0 &&
cnt
!=(
int
*)
NULL
)
delete
[]
cnt
;
84
copy_zero
( );
85
}
86
87
// ----------------------------------------------------------------------------
88
// copy a counter
89
// ----------------------------------------------------------------------------
90
91
void
multiCnt::copy_deep
(
const
multiCnt
&C )
92
{
93
copy_new
( C.
N
);
94
95
last_inc
= C.
last_inc
;
96
N
= C.
N
;
97
98
for
(
int
i
=0;
i
<
N
;
i
++ )
99
{
100
cnt
[
i
] = C.
cnt
[
i
];
101
}
102
}
103
104
// ----------------------------------------------------------------------------
105
// set all counter entries to c
106
// ----------------------------------------------------------------------------
107
108
void
multiCnt::set
(
int
c )
109
{
110
for
(
int
i
=0;
i
<
N
;
i
++ )
cnt
[
i
]=c;
111
}
112
113
114
// ----------------------------------------------------------------------------
115
// n entries zero init constructor
116
// ----------------------------------------------------------------------------
117
118
multiCnt::multiCnt
(
int
n
) :
119
last_inc( 0 )
120
{
121
copy_new
( n );
122
N
=
n
;
123
set
( 0 );
124
}
125
126
// ----------------------------------------------------------------------------
127
// n entries c init constructor
128
// ----------------------------------------------------------------------------
129
130
multiCnt::multiCnt
(
int
n
,
int
c ) :
131
last_inc( 0 )
132
{
133
copy_new
( n );
134
N
=
n
;
135
set
( c );
136
}
137
138
// ----------------------------------------------------------------------------
139
// n entries c* init constructor
140
// ----------------------------------------------------------------------------
141
142
multiCnt::multiCnt
(
int
n
,
int
*c ) :
143
last_inc( 0 )
144
{
145
copy_new
( n );
146
N
=
n
;
147
for
(
int
i
=0;
i
<
N
;
i
++ )
cnt
[
i
] = c[
i
];
148
}
149
150
// ----------------------------------------------------------------------------
151
// increment the counter
152
// ----------------------------------------------------------------------------
153
154
void
multiCnt::inc
(
void
)
155
{
156
cnt
[0]++;
157
last_inc
=0;
158
}
159
160
// ----------------------------------------------------------------------------
161
// decrement the counter
162
// ----------------------------------------------------------------------------
163
164
/*
165
void multiCnt::dec( void )
166
{
167
cnt[0]--;
168
last_inc=0;
169
}
170
*/
171
172
// ----------------------------------------------------------------------------
173
// increment the counter and carry over
174
// ----------------------------------------------------------------------------
175
176
void
multiCnt::inc_carry
(
void
)
177
{
178
for
(
int
i
=0;
i
<=
last_inc
;
i
++ )
cnt
[
i
] = 0;
179
last_inc
++;
180
cnt
[
last_inc
]++;
181
}
182
183
// ----------------------------------------------------------------------------
184
// decrement the counter and carry over
185
// ----------------------------------------------------------------------------
186
187
/*
188
void multiCnt::dec_carry( void )
189
{
190
for( int i=0; i<=last_inc; i++ ) cnt[i] = 0;
191
last_inc++;
192
cnt[last_inc]--;
193
}
194
*/
195
196
// ----------------------------------------------------------------------------
197
// increment the counter and carry over automatic
198
// ----------------------------------------------------------------------------
199
200
int
multiCnt::inc
(
int
carry )
201
{
202
if
( carry==
FALSE
)
203
{
204
inc
( );
205
}
206
else
207
{
208
if
(
last_inc
==
N
-1 )
209
{
210
return
FALSE
;
211
}
212
213
inc_carry
( );
214
}
215
216
return
TRUE
;
217
}
218
219
// ----------------------------------------------------------------------------
220
// decrement the counter and carry over automatic
221
// ----------------------------------------------------------------------------
222
223
/*
224
int multiCnt::dec( int carry )
225
{
226
if( carry==FALSE )
227
{
228
dec( );
229
}
230
else
231
{
232
if( last_inc==N-1 )
233
{
234
return FALSE;
235
}
236
237
dec_carry( );
238
}
239
240
return TRUE;
241
}
242
*/
243
244
#endif
/* HAVE_SPECTRUM */
245
// ----------------------------------------------------------------------------
246
// multicnt.cc
247
// end of file
248
// ----------------------------------------------------------------------------
multicnt.h
mod2.h
multiCnt
Definition:
multicnt.h:17
FALSE
#define FALSE
Definition:
auxiliary.h:140
multiCnt::last_inc
int last_inc
Definition:
multicnt.h:23
multiCnt::inc
void inc(void)
Definition:
multicnt.cc:154
multiCnt::cnt
int * cnt
Definition:
multicnt.h:21
n
const CanonicalForm CFMap CFMap int &both_non_zero int n
Definition:
cfEzgcd.cc:52
multiCnt::multiCnt
multiCnt()
Definition:
multicnt.h:73
TRUE
#define TRUE
Definition:
auxiliary.h:144
multiCnt::copy_delete
void copy_delete(void)
Definition:
multicnt.cc:81
multiCnt::copy_deep
void copy_deep(const multiCnt &)
Definition:
multicnt.cc:91
i
int i
Definition:
cfEzgcd.cc:123
multiCnt::copy_zero
void copy_zero(void)
Definition:
multicnt.h:51
multiCnt::N
int N
Definition:
multicnt.h:22
multiCnt::copy_new
void copy_new(int)
Definition:
multicnt.cc:32
NULL
#define NULL
Definition:
omList.c:10
multiCnt::inc_carry
void inc_carry(void)
Definition:
multicnt.cc:176
multiCnt::set
void set(int)
Definition:
multicnt.cc:108
Generated on Wed Nov 18 2015 17:12:56 by
doxygen 1.8.9.1
for
Singular debian-4.0.2-p2+ds-3