示例#1
0
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;
  }
}
示例#2
0
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);
}