// Checked: 2009-12-05 (RLVa-1.1.0h) | Added: RLVa-1.1.0h ERlvBehaviour RlvCommand::getBehaviourFromString(const std::string& strBhvr, bool* pfStrict /*=NULL*/) { std::string::size_type idxStrict = strBhvr.find("_sec"); bool fStrict = (std::string::npos != idxStrict) && (idxStrict + 4 == strBhvr.length()); if (pfStrict) *pfStrict = fStrict; RLV_ASSERT(m_BhvrMap.size() > 0); bhvr_map_t::const_iterator itBhvr = m_BhvrMap.find( (!fStrict) ? strBhvr : strBhvr.substr(0, idxStrict)); if ( (itBhvr != m_BhvrMap.end()) && ((!fStrict) || (hasStrictVariant(itBhvr->second))) ) return itBhvr->second; return RLV_BHVR_UNKNOWN; }
// Checked: 2010-12-11 (RLVa-1.2.2c) | Added: RLVa-1.2.2c bool RlvCommand::getCommands(bhvr_map_t& cmdList, const std::string &strMatch) { if (strMatch.empty()) return false; cmdList.clear(); RLV_ASSERT(m_BhvrMap.size() > 0); for (bhvr_map_t::const_iterator itBhvr = m_BhvrMap.begin(); itBhvr != m_BhvrMap.end(); ++itBhvr) { std::string strCmd = itBhvr->first; ERlvBehaviour eBhvr = itBhvr->second; if (std::string::npos != strCmd.find(strMatch)) cmdList.insert(std::pair<std::string, ERlvBehaviour>(strCmd, eBhvr)); if ( (hasStrictVariant(eBhvr)) && (std::string::npos != strCmd.append("_sec").find(strMatch)) ) cmdList.insert(std::pair<std::string, ERlvBehaviour>(strCmd, eBhvr)); } return (0 != cmdList.size()); }
// Checked: 2009-09-10 (RLVa-1.0.3a) | Modified: RLVa-1.0.3a RlvCommand::RlvCommand(const std::string& strCommand) : m_eBehaviour(RLV_BHVR_UNKNOWN), m_fStrict(false), m_eParamType(RLV_TYPE_UNKNOWN) { if ((m_fValid = parseCommand(strCommand, m_strBehaviour, m_strOption, m_strParam))) { S32 nTemp = 0; if ( ("n" == m_strParam) || ("add" == m_strParam) ) m_eParamType = RLV_TYPE_ADD; else if ( ("y" == m_strParam) || ("rem" == m_strParam) ) m_eParamType = RLV_TYPE_REMOVE; else if ("force" == m_strParam) m_eParamType = RLV_TYPE_FORCE; else if (LLStringUtil::convertToS32(m_strParam, nTemp)) // Assume it's a reply command if we can convert <param> to an S32 m_eParamType = RLV_TYPE_REPLY; else if (m_strBehaviour == "clear") // clear is the odd one out so just make it its own type m_eParamType = RLV_TYPE_CLEAR; else { m_eParamType = RLV_TYPE_UNKNOWN; m_fValid = false; } } if (!m_fValid) { m_strBehaviour = m_strOption = m_strParam = ""; return; } // Check if this is the "strict" (aka "secure") variation of a behaviour std::string::size_type idxStrict = m_strBehaviour.find("_sec"); m_fStrict = (std::string::npos != idxStrict) && (idxStrict + 4 == m_strBehaviour.length()); RlvBhvrTable::const_iterator itBhvr = m_BhvrMap.find( (!m_fStrict) ? m_strBehaviour : m_strBehaviour.substr(0, idxStrict)); if ( (itBhvr != m_BhvrMap.end()) && ((!m_fStrict) || (hasStrictVariant(itBhvr->second))) ) m_eBehaviour = itBhvr->second; }