]> git.stg.codes - stg.git/commitdiff
Code deduplication
authorMaxim Mamontov <faust.madf@gmail.com>
Mon, 25 Jul 2011 19:20:23 +0000 (22:20 +0300)
committerMaxim Mamontov <faust.madf@gmail.com>
Mon, 25 Jul 2011 19:20:23 +0000 (22:20 +0300)
28 files changed:
projects/sgauth/settings_impl.cpp
projects/sgauth/settings_impl.h
projects/sgauthstress/settings.cpp
projects/stargazer/plugins/authorization/inetaccess/inetaccess.cpp
projects/stargazer/plugins/authorization/inetaccess/inetaccess.h
projects/stargazer/plugins/authorization/stress/stress.cpp
projects/stargazer/plugins/authorization/stress/stress.h
projects/stargazer/plugins/capture/divert_freebsd/divert_cap.cpp
projects/stargazer/plugins/capture/divert_freebsd/divert_cap.h
projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.cpp
projects/stargazer/plugins/configuration/rpcconfig/rpcconfig.h
projects/stargazer/plugins/configuration/sgconfig/stgconfig.cpp
projects/stargazer/plugins/configuration/sgconfig/stgconfig.h
projects/stargazer/plugins/configuration/sgconfig2/stgconfig.cpp
projects/stargazer/plugins/configuration/sgconfig2/stgconfig.h
projects/stargazer/plugins/configuration/xrconfig/xrconfig.cpp
projects/stargazer/plugins/configuration/xrconfig/xrconfig.h
projects/stargazer/plugins/other/ping/ping.cpp
projects/stargazer/plugins/other/ping/ping.h
projects/stargazer/plugins/other/radius/radius.cpp
projects/stargazer/plugins/other/radius/radius.h
projects/stargazer/plugins/other/rscript/rscript.cpp
projects/stargazer/plugins/other/rscript/rscript.h
projects/stargazer/plugins/other/smux/smux.cpp
projects/stargazer/settings_impl.cpp
projects/stargazer/settings_impl.h
stglibs/common.lib/common.cpp
stglibs/common.lib/common.h

index 44088d1f752784ef598fcf0ae6aa1b0afd775cb0..f85364201774bd1d10ce1fcf41df975887117046 100644 (file)
@@ -38,71 +38,6 @@ SETTINGS_IMPL::SETTINGS_IMPL()
 {
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val)
-{
-if (0 == strcasecmp(value.c_str(), "yes"))
-    {
-    *val = true;
-    return 0;
-    }
-if (0 == strcasecmp(value.c_str(), "no"))
-    {
-    *val = false;
-    return 0;
-    }
-
-strError = "Incorrect value \'" + value + "\'.";
-return -1;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseInt(const string & value, int * val)
-{
-if (str2x<int>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val)
-{
-if (str2x<unsigned>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to unsigned integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseIntInRange(const string & value, int min, int max, int * val)
-{
-if (ParseInt(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
-{
-if (ParseUnsigned(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
 int SETTINGS_IMPL::ReadSettings()
 {
 CONFIGFILE cf(confFile);
index b334dac9e1c01c56cc6cd69f64a53a207c7bde6b..2de52577709728c08e15d5106e59871a6ddc988f 100644 (file)
@@ -67,12 +67,6 @@ private:
 
     std::string confFile;
     std::string strError;
-
-    int ParseInt(const std::string & value, int * val);
-    int ParseUnsigned(const std::string & value, unsigned * val);
-    int ParseIntInRange(const std::string & value, int min, int max, int * val);
-    int ParseUnsignedInRange(const std::string & value, unsigned min, unsigned max, unsigned * val);
-    int ParseYesNo(const std::string & value, bool * val);
 };
 
 #endif
index 1e1cf1a0ef6cc6325bba7bc4cc34fce1e7b35b5a..62adc14359f0eb7ad493ec2c7e19f36c8df55f0c 100644 (file)
@@ -35,60 +35,6 @@ SETTINGS::SETTINGS()
 {
 }
 //-----------------------------------------------------------------------------
-int ParseYesNo(const std::string & value, bool * val)
-{
-if (0 == strcasecmp(value.c_str(), "yes"))
-    {
-    *val = true;
-    return 0;
-    }
-if (0 == strcasecmp(value.c_str(), "no"))
-    {
-    *val = false;
-    return 0;
-    }
-
-return -1;
-}
-//-----------------------------------------------------------------------------
-int ParseInt(const std::string & value, int * val)
-{
-if (str2x<int>(value, *val))
-    return -1;
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int ParseUnsigned(const std::string & value, unsigned * val)
-{
-if (str2x<unsigned>(value, *val))
-    return -1;
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int ParseIntInRange(const std::string & value, int min, int max, int * val)
-{
-if (ParseInt(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    return -1;
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int ParseUnsignedInRange(const std::string & value, unsigned min, unsigned max, unsigned * val)
-{
-if (ParseUnsigned(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    return -1;
-
-return 0;
-}
-//-----------------------------------------------------------------------------
 int ParseModuleSettings(const DOTCONFDocumentNode * node, std::vector<PARAM_VALUE> * params)
 {
 assert(node && "DOTCONFDocumentNode must not be NULL!");
index 439bee185ed3aabf03201ffdcaf104a1dd966a6e..33c23bced70f38ecee79b512d9ebe5832c6567a2 100644 (file)
@@ -95,21 +95,6 @@ AUTH_IA_SETTINGS::AUTH_IA_SETTINGS()
 {
 }
 //-----------------------------------------------------------------------------
-int AUTH_IA_SETTINGS::ParseIntInRange(const string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int AUTH_IA_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 int p;
index e16c02574c95d45aa6c8516c4062f85ffdff42cf..fe55649590990306bbeeee1a87d326b9def40a49 100644 (file)
@@ -178,7 +178,6 @@ public:
     FREEMB          GetFreeMbShowType() const { return freeMbShowType; };
 
 private:
-    int             ParseIntInRange(const std::string & str, int min, int max, int * val);
     int             userDelay;
     int             userTimeout;
     uint16_t        port;
index 756e6e1a5e79ab924a79d1c03110fa98f11d1dea..481444b520e983eada0d1bb59548a8f3b8f562a7 100644 (file)
@@ -91,21 +91,6 @@ AUTH_STRESS_SETTINGS::AUTH_STRESS_SETTINGS()
 {
 }
 //-----------------------------------------------------------------------------
-int AUTH_STRESS_SETTINGS::ParseIntInRange(const string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int AUTH_STRESS_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 PARAM_VALUE pv;
index 85eb75be83094e5a22fd2722a7b9fe5ca8747712..bfcf56d01c7a0f76f707ca5100f8c2c9f9cd5340 100644 (file)
@@ -76,7 +76,6 @@ public:
     int             ParseSettings(const MODULE_SETTINGS & s);
     int             GetAverageOnlineTime() const;
 private:
-    int             ParseIntInRange(const std::string & str, int min, int max, int * val);
     int             averageOnlineTime;
     std::string     errorStr;
 };
index f6e7731a434c96d097f0b17470b05b6e63eb8d81..61090de7c1997cc297991dc353f32fb0649ecb5e 100644 (file)
@@ -300,18 +300,3 @@ port = p;
 return 0;
 }
 //-----------------------------------------------------------------------------
-int DIVERT_CAP::ParseIntInRange(const std::string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
index 645610ebfaa4c1bc9dfda8783fbc09966deb31ed..f5bb432b96b171ae70c9152f1fc2d6852e4fc894 100644 (file)
@@ -76,8 +76,6 @@ private:
     int                 DivertCapRead(char * buffer, int blen, char ** iface, int n);
     int                 DivertCapClose();
 
-    int                 ParseIntInRange(const std::string & str, int min, int max, int * val);
-
     MODULE_SETTINGS     settings;
 
     int                 port;
index c2c544fdd69374e1f194b8d2666a404833bee6dd..8afbd9cdda8f1bf8acab5880f1c5e625956a495e 100644 (file)
@@ -47,24 +47,6 @@ RPC_CONFIG_SETTINGS::RPC_CONFIG_SETTINGS()
 {
 }
 
-int RPC_CONFIG_SETTINGS::ParseIntInRange(const std::string & str,
-                                         int min,
-                                         int max,
-                                         int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-
 int RPC_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 int p;
index da11d46709c54488d405d0f046f01f8b72608e5e..1213f7d310223ec9a024a9ca8a2c0d957d13e1f2 100644 (file)
@@ -36,10 +36,6 @@ public:
     uint16_t             GetPort() const { return port; };
     double               GetCookieTimeout() const { return cookieTimeout; };
 private:
-    int     ParseIntInRange(const std::string & str,
-                            int min,
-                            int max,
-                            int * val);
     std::string  errorStr;
     int          port;
     double       cookieTimeout;
index 9ffbc94963e6e4f049d29b27fad153cd529b17ae..06e915c37e873e11461453f4a02f836405f4d74f 100644 (file)
@@ -46,21 +46,6 @@ const std::string & STG_CONFIG_SETTINGS::GetStrError() const
 return errorStr;
 }
 //-----------------------------------------------------------------------------
-int STG_CONFIG_SETTINGS::ParseIntInRange(const std::string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int STG_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 int p;
index 7d490aefb7f0e49865bd351cae51eaf447e28868..efa57d45063ccfa7596adac706bcc24d0c11bdff 100644 (file)
@@ -21,7 +21,6 @@ public:
     int             ParseSettings(const MODULE_SETTINGS & s);
     uint16_t        GetPort() const;
 private:
-    int     ParseIntInRange(const std::string & str, int min, int max, int * val);
     std::string errorStr;
     int     port;
 };
index cec02d419e4dc892c6a12a7e5618f66ccd455e6e..d83942dc3a78065c172a8a5475643da9090a8609 100644 (file)
@@ -47,21 +47,6 @@ const string& STG_CONFIG_SETTINGS::GetStrError() const
 return errorStr;
 }
 
-int STG_CONFIG_SETTINGS::ParseIntInRange(const string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-
 int STG_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 int p;
index cf9d72b04022ed3cd5adc4691f9bcc06352fb7b3..1c8743d15c2b4606b2e1017ccfee98e8be1b7946 100644 (file)
@@ -22,7 +22,6 @@ public:
     int             ParseSettings(const MODULE_SETTINGS & s);
     uint16_t        GetPort();
 private:
-    int     ParseIntInRange(const string & str, int min, int max, int * val);
     string  errorStr;
     int     port;
 };
index cb156eedd10a2a270a4e62c3c4eb459216b54663..856ae88689679c04baef6d2fae7e55b9e942e4dd 100644 (file)
@@ -44,41 +44,8 @@ const string & XR_CONFIG_SETTINGS::GetStrError() const
 return errorStr;
 }
 //-----------------------------------------------------------------------------
-int XR_CONFIG_SETTINGS::ParseIntInRange(const string & str, int min, int max, int * val)
-{
-if (strtoi2(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int XR_CONFIG_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
-/*int p;
-PARAM_VALUE pv;
-vector<PARAM_VALUE>::const_iterator pvi;
-
-pv.param = "Port";
-pvi = find(s.moduleParams.begin(), s.moduleParams.end(), pv);
-if (pvi == s.moduleParams.end())
-    {
-    errorStr = "Parameter \'Port\' not found.";
-    return -1;
-    }
-
-if (ParseIntInRange(pvi->value[0], 2, 65535, &p))
-    {
-    errorStr = "Cannot parse parameter \'Port\': " + errorStr;
-    return -1;
-    }
-port = p;*/
 
 return 0;
 }
index 79e099f13d14d5c9fc9900b40fb1f1fc8a3670b7..4630edb421bea2ca5949e0f586000ad5db53bd1d 100644 (file)
@@ -1,9 +1,7 @@
 #include <string>
 #include <pthread.h>
 #include "base_plugin.h"
-//#include "common_settings.h"
 #include "common.h"
-//#include "configproto.h"
 
 using namespace std;
 
@@ -22,7 +20,6 @@ public:
     uint16_t        GetPort();
 
 private:
-    int     ParseIntInRange(const string & str, int min, int max, int * val);
     string  errorStr;
     int     port;
 };
index 0fb5d30bda075db38a5e69840bd6b1553fd66715..ec13704443db2f193fd06ce80089f77fed9c5292 100644 (file)
@@ -87,21 +87,6 @@ if (ParseIntInRange(pvi->value[0], 5, 3600, &pingDelay))
 return 0;
 }
 //-----------------------------------------------------------------------------
-int PING_SETTINGS::ParseIntInRange(const std::string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 PING::PING()
     : users(NULL),
       nonstop(false),
index 8dcbe2029d31626d6b0fb345928db0a90f0807fa..aecbfb1559a4902284331b32993faa013b7263b8 100644 (file)
@@ -76,8 +76,6 @@ public:
     int ParseSettings(const MODULE_SETTINGS & s);
     int GetPingDelay() const { return pingDelay; }
 private:
-    int ParseIntInRange(const std::string & str, int min, int max, int * val);
-
     int pingDelay;
     mutable std::string errorStr;
 };
index 937d853ca374ab819aa0340db214a96e7390eeda..afcc46fd65d446265436146d47211e8a2f098f26 100644 (file)
@@ -78,21 +78,6 @@ return radc.GetPlugin();
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
 //-----------------------------------------------------------------------------
-int RAD_SETTINGS::ParseIntInRange(const std::string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int RAD_SETTINGS::ParseServices(const std::vector<std::string> & str, std::list<std::string> * lst)
 {
 std::copy(str.begin(), str.end(), std::back_inserter(*lst));
index 1c32bd0bf88435336fe0b46d135e5ca120267f8a..70c904ae965b479dfba0cbeeceb83093620d4430 100644 (file)
@@ -66,7 +66,6 @@ public:
     const std::list<string> & GetAcctServices() const { return acctServices; }
 
 private:
-    int ParseIntInRange(const std::string & str, int min, int max, int * val);
     int ParseServices(const std::vector<std::string> & str, std::list<std::string> * lst);
 
     uint16_t port;
index 410e7aa8177515242a134b31dae5ff20d234edf8..1c2e97bbb81da3fbebe4895db52bc487b4e1f2fb 100644 (file)
@@ -101,21 +101,6 @@ RS_SETTINGS::RS_SETTINGS()
 {
 }
 //-----------------------------------------------------------------------------
-int RS_SETTINGS::ParseIntInRange(const string & str, int min, int max, int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    errorStr = "Incorrect value \'" + str + "\'.";
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    errorStr = "Value \'" + str + "\' out of range.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
 int RS_SETTINGS::ParseSettings(const MODULE_SETTINGS & s)
 {
 int p;
index 81cc1e17a40f6c4ff86aae064784817d719991fa..24d44763af18c391c46c9dec2a459c2a79e2a759 100644 (file)
@@ -114,7 +114,6 @@ public:
     const std::string & GetMapFileName() const { return subnetFile; }
 
 private:
-    int                 ParseIntInRange(const std::string & str, int min, int max, int * val);
     int                 sendPeriod;
     uint16_t            port;
     string              errorStr;
index 14f47da3c5e5b21b2f11b9e0a4d3d6fba2982ed6..0cf56ff80cdc1a7c7d3ef2ed457673e847f0ca38 100644 (file)
@@ -34,22 +34,6 @@ PLUGIN * GetPlugin()
 return sac.GetPlugin();
 }
 
-int ParseIntInRange(const std::string & str,
-                    int min,
-                    int max,
-                    int * val)
-{
-if (str2x(str.c_str(), *val))
-    {
-    return -1;
-    }
-if (*val < min || *val > max)
-    {
-    return -1;
-    }
-return 0;
-}
-
 SMUX_SETTINGS::SMUX_SETTINGS()
     : ip(0),
       port(0)
index d197efc40c32877bf1852982b2f34a8df7a15d93..2bf8d08271bf2b32bf718398d7c964d09744153e 100644 (file)
@@ -138,71 +138,6 @@ SETTINGS_IMPL::SETTINGS_IMPL(const SETTINGS_IMPL & rval)
 {
 }
 //-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseYesNo(const string & value, bool * val)
-{
-if (0 == strcasecmp(value.c_str(), "yes"))
-    {
-    *val = true;
-    return 0;
-    }
-if (0 == strcasecmp(value.c_str(), "no"))
-    {
-    *val = false;
-    return 0;
-    }
-
-strError = "Incorrect value \'" + value + "\'.";
-return -1;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseInt(const string & value, int * val)
-{
-if (str2x<int>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsigned(const string & value, unsigned * val)
-{
-if (str2x<unsigned>(value, *val))
-    {
-    strError = "Cannot convert \'" + value + "\' to unsigned integer.";
-    return -1;
-    }
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseIntInRange(const string & value, int min, int max, int * val)
-{
-if (ParseInt(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
-int SETTINGS_IMPL::ParseUnsignedInRange(const string & value, unsigned min, unsigned max, unsigned * val)
-{
-if (ParseUnsigned(value, val) != 0)
-    return -1;
-
-if (*val < min || *val > max)
-    {
-    strError = "Value \'" + value + "\' out of range.";
-    return -1;
-    }
-
-return 0;
-}
-//-----------------------------------------------------------------------------
 int SETTINGS_IMPL::ParseModuleSettings(const DOTCONFDocumentNode * node, vector<PARAM_VALUE> * params)
 {
 const DOTCONFDocumentNode * childNode;
index 43dcab0ccccdb535fd2bd20ae2480d02122aeb1c..4ab5f31e57f11741dac4631e73f13720ccb07819 100644 (file)
@@ -101,13 +101,7 @@ public:
 
 private:
 
-    int ParseInt(const std::string & value, int * val);
-    int ParseUnsigned(const std::string & value, unsigned * val);
-    int ParseIntInRange(const std::string & value, int min, int max, int * val);
-    int ParseUnsignedInRange(const std::string & value, unsigned min, unsigned max, unsigned * val);
-    int ParseYesNo(const std::string & value, bool * val);
-    int ParseDetailStatWritePeriod(const std::string & detailStatPeriodStr);
-
+    int ParseDetailStatWritePeriod(const std::string & str);
     int ParseModuleSettings(const DOTCONFDocumentNode * dirNameNode, std::vector<PARAM_VALUE> * params);
 
     static void ErrorCallback(void * data, const char * buf);
index d0f1ff4d27bf935c42aede48843be183daecda16..606f057afe457346beb6dd28fd9348759c326d3a 100644 (file)
@@ -978,4 +978,59 @@ delete[] inBuf;
 
 return dst;
 }
-//---------------------------------------------------------------------------
+
+int ParseYesNo(const std::string & str, bool * val)
+{
+if (0 == strncasecmp(str.c_str(), "yes", 3))
+    {
+    *val = true;
+    return 0;
+    }
+
+if (0 == strncasecmp(str.c_str(), "no", 2))
+    {
+    *val = false;
+    return 0;
+    }
+
+return -1;
+}
+
+inline
+int ParseInt(const std::string & str, int * val)
+{
+if (str2x<int>(str, *val))
+    return -1;
+return 0;
+}
+
+inline
+int ParseUnsigned(const string & str, unsigned * val)
+{
+if (str2x<unsigned>(str, *val))
+    return -1;
+return 0;
+}
+
+int ParseIntInRange(const string & str, int min, int max, int * val)
+{
+if (ParseInt(str, val) != 0)
+    return -1;
+
+if (*val < min || *val > max)
+    return -1;
+
+return 0;
+}
+
+int ParseUnsignedInRange(const string & str, unsigned min,
+                         unsigned max, unsigned * val)
+{
+if (ParseUnsigned(str, val) != 0)
+    return -1;
+
+if (*val < min || *val > max)
+    return -1;
+
+return 0;
+}
index 3752822aa728a067481c810d3c9ed3fa99a0314a..19a8773e3d93b031183f989f03a4012d9b66930e 100644 (file)
@@ -98,6 +98,13 @@ std::string &   Trim(std::string & val);
 
 std::string     IconvString(const std::string & source, const std::string & from, const std::string & to);
 
+int ParseInt(const std::string & str, int * val);
+int ParseUnsigned(const std::string & str, unsigned * val);
+int ParseIntInRange(const std::string & str, int min, int max, int * val);
+int ParseUnsignedInRange(const std::string & str, unsigned min,
+                         unsigned max, unsigned * val);
+int ParseYesNo(const std::string & str, bool * val);
+
 //-----------------------------------------------------------------------------
 template <typename varT>
 int str2x(const std::string & str, varT & x)