std::tuple<std::string, std::string, CommandArguments, ExecuteCommand> CommandParser::parse(const std::vector<std::string>& tokens, ParseMode mode) const { BOOST_ASSERT(mode == ParseMode::ONE_SHOT); const std::string& noun = tokens.size() > 0 ? tokens[0] : ""; const std::string& verb = tokens.size() > 1 ? tokens[1] : ""; size_t nameLen = std::min<size_t>(2, tokens.size()); auto i = m_commands.find({noun, verb}); if (i == m_commands.end()) { if (verb.empty()) { i = m_commands.find({noun, "list"}); } else { // help, exit, quit, legacy nfdc commands i = m_commands.find({noun, ""}); } nameLen = std::min<size_t>(1, tokens.size()); } if (i == m_commands.end() || (i->second->modes & static_cast<AvailableIn>(mode)) == 0) { BOOST_THROW_EXCEPTION(Error("no such command: " + noun + " " + verb)); } const CommandDefinition& def = i->second->def; NDN_LOG_TRACE("found command " << def.getNoun() << " " << def.getVerb()); return std::make_tuple(def.getNoun(), def.getVerb(), def.parse(tokens, nameLen), i->second->execute); }
void logFromModule2() { NDN_LOG_TRACE("trace" << 2); NDN_LOG_DEBUG("debug" << 2); NDN_LOG_INFO("info" << 2); NDN_LOG_WARN("warn" << 2); NDN_LOG_ERROR("error" << 2); NDN_LOG_FATAL("fatal" << 2); }