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

◆ Delete()

template<typename MonomType>
void BIBasis::JanetTree< MonomType >::Delete ( const Triple< MonomType > * triple)

Definition at line 420 of file janettree.hpp.

421 {
422 if (!triple)
423 {
424 return;
425 }
426
428 //count bifurcations
429 typename MonomType::Integer var = 0;
430 unsigned bifurcations = 0;
431
432 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
433 {
434 ++bifurcations;
435 }
436
437 do
438 {
439 while(nodeIterator.GetDegree() < triple->GetPolynomLm()[var])
440 {
441 nodeIterator.StepNextDegree();
442 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
443 {
444 ++bifurcations;
445 }
446 }
447
448 if (nodeIterator.HasNextVariable())
449 {
450 ++var;
451 nodeIterator.StepNextVariable();
452 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
453 {
454 ++bifurcations;
455 }
456 }
457 else
458 {
459 break;
460 }
461 } while(true);
462
463 //deletion
465 var = 0;
466 bool varDirection = false;
467
468 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
469 {
470 --bifurcations;
471 }
472 if (!bifurcations)
473 {
474 if (nodeIterator.GetDegree() < triple->GetPolynomLm()[var])
475 {
476 nodeIterator.StepNextDegree();
477 }
478 else
479 {
480 varDirection = true;
481 }
482 }
483
484 while (bifurcations > 0)
485 {
486 while(nodeIterator.GetDegree() < triple->GetPolynomLm()[var] && bifurcations > 0)
487 {
488 nodeIterator.StepNextDegree();
489 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
490 {
491 --bifurcations;
492 }
493 }
494
495 if (!bifurcations)
496 {
497 if (nodeIterator.GetDegree() < triple->GetPolynomLm()[var])
498 {
499 nodeIterator.StepNextDegree();
500 break;
501 }
502 else
503 {
504 varDirection = true;
505 break;
506 }
507 }
508
509 ++var;
510 nodeIterator.StepNextVariable();
511 if (nodeIterator.HasNextDegree() && nodeIterator.HasNextVariable())
512 {
513 --bifurcations;
514 }
515 if (!bifurcations)
516 {
517 if (nodeIterator.GetDegree() < triple->GetPolynomLm()[var])
518 {
519 nodeIterator.StepNextDegree();
520 break;
521 }
522 else
523 {
524 varDirection = true;
525 break;
526 }
527 }
528 }
529
530 if (varDirection)
531 {
533 tmpIterator.StepNextVariable();
536 }
537 else
538 {
540 }
541 }
void Delete(const Triple< MonomType > *triple)

References BIBasis::JanetTree< MonomType >::Iterator::Clear(), BIBasis::JanetTree< MonomType >::Iterator::Delete(), BIBasis::JanetTree< MonomType >::Iterator::GetDegree(), BIBasis::Triple< MonomType >::GetPolynomLm(), BIBasis::JanetTree< MonomType >::Iterator::HasNextDegree(), BIBasis::JanetTree< MonomType >::Iterator::HasNextVariable(), Root, BIBasis::JanetTree< MonomType >::Iterator::StepNextDegree(), and BIBasis::JanetTree< MonomType >::Iterator::StepNextVariable().

Referenced by BIBasis::JanetTree< MonomType >::Iterator::Clear().