//! @file //! @author Claes Nasten // // This program is licensed under the GNU GPL. // See the LICENSE file for more information. // #include "CfgParserKey.hh" #include "Util.hh" #include #include using std::string; using std::cerr; using std::endl; using std::numeric_limits; //! @brief Parses and store integer value. //! @param or_value Reference to string representing integer value. //! @return true on success, else false and m_ir_set to m_i_default. void CfgParserKeyInt::parse_value (const std::string &or_value) throw (std::string&) { long value; char *endptr; // Get long value. value = strtol (or_value.c_str (), &endptr, 10); // Check for validity, 0 is returned on failiure with endptr set to the // beginning of the string, else we are (semi) ok. if ((value == 0) && (endptr == or_value.c_str ())) { m_ir_set = m_i_default; } else { if (value < m_i_value_min) { m_ir_set = m_i_value_min; throw string ("value to low, min value " + Util::to_string (m_i_value_min)); } if (value > m_i_value_max) { m_ir_set = m_i_value_max; throw string ("value to high, max value " + Util::to_string (m_i_value_max)); } } m_ir_set = value; } //! @brief Parses or_value and sets m_br_set. //! Boolean true is represented either by case insensitive true or 1. //! Boolean false is represented either by case insensitive false or 0. //! @param or_value Value to parse. //! @return true on success, else false and m_br_set set to m_b_default. void CfgParserKeyBool::parse_value (const std::string &or_value) throw (std::string&) { if ((or_value == "1") || !strcasecmp (or_value.c_str(), "TRUE")) { m_br_set = true; } else if ((or_value == "0") || !strcasecmp (or_value.c_str(), "FALSE")) { m_br_set = false; } else { m_br_set = m_b_default; throw string ("not bool value"); } } //! @brief Parses or_value and sets m_or_set. //! @param or_value Value to parse. //! @return true on success, else false and m_or_set set to m_o_default. void CfgParserKeyString::parse_value (const std::string &or_value) throw (std::string&) { m_or_set = or_value; if ((m_i_length_min != numeric_limits::min ()) && (static_cast (m_or_set.size()) < m_i_length_min)) { m_or_set = m_o_default; throw string ("string too short, min length " + Util::to_string (m_i_length_min)); } if ((m_i_length_max != numeric_limits::max ()) && (static_cast (m_or_set.size()) > m_i_length_max)) { m_or_set = m_o_default; throw string ("string too long, max length " + Util::to_string (m_i_length_max)); } } //! @brief Parses or_value and sets m_or_set. //! @param or_value Value to parse. //! @return true on success, else false and m_or_set set to m_o_default. void CfgParserKeyPath::parse_value (const std::string &or_value) throw (std::string&) { if (or_value.size ()) { m_or_set = or_value; Util::expandFileName (m_or_set); } else { m_or_set = m_o_default; throw string ("path too short"); } }