/** | returns the number of indices added. */ unsigned NxsSetReader::InterpretTokenAsIndices(NxsToken &token, const NxsLabelToIndicesMapper & mapper, const char * setType, const char * cmdName, NxsUnsignedSet * destination) { try { const std::string t = token.GetToken(); if (NxsString::case_insensitive_equals(t.c_str(), "ALL")) { unsigned m = mapper.GetMaxIndex(); NxsUnsignedSet s; for (unsigned i = 0; i <= m; ++i) s.insert(i); destination->insert(s.begin(), s.end()); return (unsigned)s.size(); } return mapper.GetIndicesForLabel(t, destination); } catch (const NxsException & x) { NxsString errormsg = "Error in the "; errormsg << setType << " descriptor of a " << cmdName << " command.\n"; errormsg += x.msg; throw NxsException(errormsg, token); } catch (...) { NxsString errormsg = "Expecting a "; errormsg << setType << " descriptor (number or label) in the " << cmdName << ". Encountered "; errormsg << token.GetToken(); throw NxsException(errormsg, token); } }
std::vector<unsigned> NxsSetReader::GetSetAsVector(const NxsUnsignedSet &s) { std::vector<unsigned> u; u.reserve(s.size()); for (NxsUnsignedSet::const_iterator sIt = s.begin(); sIt != s.end(); ++sIt) u.push_back(*sIt); return u; }