const Ring /* or null */ *rawARingTower2(const Ring *R1, M2_ArrayString new_names) { try { const M2::ConcreteRing<M2::ARingTower> *K = dynamic_cast<const M2::ConcreteRing<M2::ARingTower> *>(R1); if (K == 0) { ERROR("expected a tower ring"); return NULL; } const M2::ARingTower &A = K->ring(); std::vector<std::string> new_varnames; M2_ArrayString_to_stdvector(new_names, new_varnames); const M2::ARingTower *T = M2::ARingTower::create(A, new_varnames); return M2::ConcreteRing<M2::ARingTower>::create(T); } catch (exc::engine_error e) { ERROR(e.what()); return NULL; } }
const Ring /* or null */ *rawARingTower1(const Ring *K, M2_ArrayString names) { try { const M2::ConcreteRing<M2::ARingZZpFFPACK> *Kp = dynamic_cast<const M2::ConcreteRing<M2::ARingZZpFFPACK> *>(K); if (Kp == 0) { ERROR("expected a base ring ZZ/p"); return NULL; } const M2::ARingZZpFFPACK &A = Kp->ring(); // Get the names into the correct form: std::vector<std::string> varnames; M2_ArrayString_to_stdvector(names, varnames); const M2::ARingTower *T = M2::ARingTower::create(A, varnames); return M2::ConcreteRing<M2::ARingTower>::create(T); } catch (exc::engine_error e) { ERROR(e.what()); return NULL; } }
TEST(Util, m2strings_basic) { std::vector<std::string> a {"a", "b", "c1", "d2", "e_3"}; M2_ArrayString b = stdvector_to_M2_ArrayString(a); auto c = M2_ArrayString_to_stdvector(b); EXPECT_EQ(a,c); }