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

◆ rawARingTower3()

const Ring * rawARingTower3 ( const Ring * R1,
engine_RawRingElementArray eqns )

Definition at line 346 of file aring.cpp.

348{
349 try
350 {
352 dynamic_cast<const M2::ConcreteRing<M2::ARingTower> *>(R1);
353 if (K == nullptr)
354 {
355 ERROR("expected a tower ring");
356 return nullptr;
357 }
358 const M2::ARingTower &A = K->ring();
359
360 std::vector<M2::ARingTower::ElementType> extensions;
361
362 for (int i = 0; i < eqns->len; i++)
363 {
364 const RingElement *f = eqns->array[i];
366 if (f->get_ring() != R1)
367 {
368 ERROR("extension element has incorrect base ring");
369 return nullptr;
370 }
371 A.from_ring_elem(f1, f->get_value());
372 extensions.push_back(f1);
373 }
374 M2::ARingTower *T = M2::ARingTower::create(A, extensions);
376 std::unique_ptr<M2::ARingTower>(T));
377 } catch (const exc::engine_error& e)
378 {
379 ERROR(e.what());
380 return nullptr;
381 }
382}
ARingPolynomial ElementType
void from_ring_elem(ElementType &result, const ring_elem &a) const
static ARingTower * create(const BaseRingType &baseRing, const std::vector< std::string > &names)
aring-style coefficient ring for tower polynomial rings (Z/p)[x_0][x_1]...[x_{n-1}...
const RingType & ring() const
static ConcreteRing< RingType > * create(std::unique_ptr< RingType > R)
ring_elem get_value() const
Definition relem.hpp:79
const Ring * get_ring() const
Definition relem.hpp:81
Front-end-visible "ring element" value: an engine ring_elem paired with the Ring* that gives it meani...
Definition relem.hpp:67
const int ERROR
Definition m2-mem.cpp:55
#define T
Definition table.c:13

References M2::ARingTower::create(), M2::ConcreteRing< RingType >::create(), ERROR, M2::ARingTower::from_ring_elem(), RingElement::get_ring(), RingElement::get_value(), M2::ConcreteRing< RingType >::ring(), and T.