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

◆ VectorArithmetic()

VectorArithmetic::VectorArithmetic ( const Ring * R)
inline

Definition at line 683 of file VectorArithmetic.hpp.

684 {
685 // if the rings coming in are defined in a similar way, we could avoid the switch
686 // statement here as well and make it compile time. It would make the class templated
687 // on the variant class describing all the rings.
688 switch (R->ringID())
689 {
691 mConcreteVector = new ConcreteVectorArithmetic
692 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingZZpFlint>* >(R)->ring()};
693 break;
695 mConcreteVector = new ConcreteVectorArithmetic
696 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingGFFlintBig>* >(R)->ring()};
697 break;
699 mConcreteVector = new ConcreteVectorArithmetic
700 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingGFFlint>* >(R)->ring()};
701 break;
702 case M2::ring_QQ:
703 mConcreteVector = new ConcreteVectorArithmetic
704 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingQQGMP>* >(R)->ring()};
705 break;
707 mConcreteVector = new ConcreteVectorArithmetic
708 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingZZpFFPACK>* >(R)->ring()};
709 break;
710 case M2::ring_ZZp:
711 mConcreteVector = new ConcreteVectorArithmetic
712 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingZZp>* >(R)->ring()};
713 break;
714 case M2::ring_GFM2:
715 mConcreteVector = new ConcreteVectorArithmetic
716 {R, &dynamic_cast< const M2::ConcreteRing<M2::ARingGFM2>* >(R)->ring()};
717 break;
718 case M2::ring_old:
719 if (R->cast_to_Z_mod() != nullptr)
720 mConcreteVector = new ConcreteVectorArithmetic{R, R->cast_to_Z_mod()->get_CoeffRing()};
721 else
722 {
723 std::cout << "Using GC ring in VectorArithmetic." << std::endl;
724 mConcreteVector = new ConcreteVectorArithmetic{R, R->getCoefficientRingR()};
725 }
726 break;
727 default:
728 // dummy ring type for default
729 // throw an error here...
730 std::cerr << "*** error! *** ring ID not found....!" << std::endl;
731 mConcreteVector = new ConcreteVectorArithmetic<M2::DummyRing>();
732 }
733 }
virtual M2::RingID ringID() const
Definition ring.hpp:164
const CoefficientRingR * getCoefficientRingR() const
Definition ring.cpp:24
virtual const Z_mod * cast_to_Z_mod() const
Definition ring.hpp:237
const Ring * ring() const
CoefficientRingZZp * get_CoeffRing() const
Definition ZZp.hpp:93
@ ring_old
refers to all rings which are not ConcreteRing's.
Definition aring.hpp:94
@ ring_GFM2
Definition aring.hpp:84
@ ring_ZZpFfpack
Definition aring.hpp:82
@ ring_ZZpFlint
Definition aring.hpp:83
@ ring_GFFlintZech
Definition aring.hpp:86
@ ring_GFFlintBig
Definition aring.hpp:85
@ ring_ZZp
Definition aring.hpp:81
@ ring_QQ
Definition aring.hpp:79

References Ring::cast_to_Z_mod(), Z_mod::get_CoeffRing(), Ring::getCoefficientRingR(), mConcreteVector, ring(), M2::ring_GFFlintBig, M2::ring_GFFlintZech, M2::ring_GFM2, M2::ring_old, M2::ring_QQ, M2::ring_ZZp, M2::ring_ZZpFfpack, M2::ring_ZZpFlint, and Ring::ringID().