Macaulay2 Engine
Loading...
Searching...
No Matches

◆ ass_prime_generator()

void MinimalPrimes::ass_prime_generator ( Nmi_node * p,
int codim )
private

Definition at line 265 of file monideal-minprimes.cpp.

266{
267 int i = codim + 1;
268 if (exps[i] == nullptr) exps[i] = newarray_atomic(int, nvars);
269 exponents_t exp0 = exps[i];
270 for (int j = 0; j < nvars; j++) exp0[j] = exps[codim][j];
271 for (;;)
272 {
273 if (p == nullptr)
274 {
275 if (state == do_codim)
276 {
277 if (codim < codim_limit) codim_limit = codim;
278 }
279 else
280 {
281 to_prime_ideal(nvars, exp0);
282 Bag *b = new Bag(0);
284 primes->insert(b);
285 n_minprimes++;
286 }
287 return;
288 }
289 const int *m = p->monom().data();
290 switch (reduce_exp(m, exp0))
291 {
292 case 0:
293 p = mi->next(p);
294 break;
295 case -1:
296 return;
297 case 1:
298 if (codim < codim_limit)
299 for (index_varpower i2 = m; i2.valid(); ++i2)
300 if (exp0[i2.var()] == 0)
301 {
302 exp0[i2.var()] = 1;
303 ass_prime_generator(mi->next(p), codim + 1);
304 exp0[i2.var()] = -1;
306 return;
307 }
308 return;
309 }
310 }
311}
ExponentListIterator< int, true > index_varpower
exponents::Exponents exponents_t
static int reduce_exp(const int *m, const int *exp)
Definition assprime.cpp:59
static void to_prime_ideal(int n, int *exp)
Definition assprime.cpp:80
static void from_expvector(int n, exponents::ConstExponents a, Vector &result)
enum MinimalPrimes::@077213145220241077135133272357312173137144302304 state
void ass_prime_generator(Nmi_node *p, int codim)
MonomialIdeal * primes
MonomialIdeal * mi
gc_vector< int > & monom()
Definition int-bag.hpp:60
int p
int_bag Bag
Definition int-bag.hpp:70
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References ass_prime_generator(), codim_limit, do_codim, exps, ExponentList< int, true >::from_expvector(), mi, minprime_limit, int_bag::monom(), n_minprimes, newarray_atomic, nvars, p, primes, reduce_exp(), state, and to_prime_ideal().

Referenced by ass_prime_generator(), codimension(), and min_primes().