Add utility functions to check the contents of a string
authorMikko Rasa <tdb@tdb.fi>
Wed, 24 Dec 2008 07:08:10 +0000 (07:08 +0000)
committerMikko Rasa <tdb@tdb.fi>
Wed, 24 Dec 2008 07:08:10 +0000 (07:08 +0000)
Fix str_to_bool

source/lexicalcast.cpp
source/utils.cpp
source/utils.h

index 687a37b4e3ebb85250e699d30c54da9f0e66b7ed..cdd55780b5f612ee86cce7db6beee8c64d80502f 100644 (file)
@@ -211,10 +211,14 @@ string bool_to_str(bool b, const Fmt &f)
 
 bool str_to_bool(const string &s)
 {
+       if(s.empty())
+               throw LexicalError("Empty input in boolean conversion");
+
        if(s=="1" || s=="true" || s=="yes" || s=="on")
                return true;
        else if(s=="0" || s=="false" || s=="no" || s=="off")
-               return true;
+               return false;
+
        throw LexicalError("Invalid input in boolean conversion");
 }
 
index d67cc7e8bcd3947f62947be762af28aa60bf3f30..baf1333138b82807864df7bb1f04ebc7365e3f33 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspstrings
-Copyright © 2006-2007 Mikko Rasa
+Copyright © 2006-2008 Mikko Rasa
 Distributed under the LGPL
 */
 
@@ -46,6 +46,14 @@ vector<string> do_split(const string &str, const string &sep, int max_split)
        return result;
 }
 
+bool check_str(const std::string &str, int (*pred)(int))
+{
+       for(string::const_iterator i=str.begin(); i!=str.end(); ++i)
+               if(!pred(*i))
+                       return false;
+       return true;
+}
+
 }
 
 namespace Msp {
@@ -79,6 +87,21 @@ string toupper(const string &str)
        return result;
 }
 
+bool isnumrc(const string &str)
+{
+       return check_str(str, isdigit);
+}
+
+bool isalpha(const string &str)
+{
+       return check_str(str, isalpha);
+}
+
+bool isalnum(const string &str)
+{
+       return check_str(str, isalnum);
+}
+
 vector<string> split(const string &str, const string &sep, int max_split)
 {
        return do_split<false, false>(str, sep, max_split);
index 5492f9558ea4b22a36fcee2a4bcc437c4cfd4b88..44c2edb86c19abcaa003498e7385f31a911b3822 100644 (file)
@@ -1,7 +1,7 @@
 /* $Id$
 
 This file is part of libmspstrings
-Copyright © 2006-2007 Mikko Rasa
+Copyright © 2006-2008 Mikko Rasa
 Distributed under the LGPL
 */
 
@@ -33,6 +33,28 @@ Converts a string to upper case.
 */
 std::string toupper(const std::string &);
 
+/**
+Checks whether a string consists of digits only.
+*/
+bool isnumrc(const std::string &);
+
+/**
+Checks whether a string consists of alphabetic characters only.
+*/
+bool isalpha(const std::string &);
+
+/**
+Checks whether a string consists of alphanumeric characters only.
+*/
+bool isalnum(const std::string &);
+
+/* These are required to make the standard version work from inside the Msp
+namespace */
+using std::tolower;
+using std::toupper;
+using std::isalpha;
+using std::isalnum;
+
 /**
 Splits a string at occurrences of any of the characters in sep.  If max_split
 is non-negative, at most that many split will be performed, i.e. the resulting