]> git.tdb.fi Git - libs/core.git/commitdiff
Exception changes for Fmt and Formatter
authorMikko Rasa <tdb@tdb.fi>
Sat, 28 May 2011 08:54:12 +0000 (11:54 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 28 May 2011 09:12:47 +0000 (12:12 +0300)
source/strings/fmt.cpp
source/strings/fmt.h
source/strings/format.cpp

index e06f71ab456f40d55825345ea413bc6981d10dd6..7026fe0772c690830d7e0811910f0ec006b8c940 100644 (file)
@@ -5,15 +5,15 @@ Copyright © 2006-2008 Mikko Rasa
 Distributed under the LGPL
 */
 
-#include <msp/core/except.h>
 #include "fmt.h"
 
 using namespace std;
 
 namespace Msp {
 
-void Fmt::parse(const char *f)
+void Fmt::parse(const char *s)
 {
+       const char *f = s;
        if(*f=='%') ++f;
 
        for(; *f; ++f)
@@ -82,7 +82,7 @@ void Fmt::parse(const char *f)
        else if(*f=='i')
                base = AUTOBASE;
        else
-               throw InvalidParameterValue("Invalid conversion specifier");
+               throw format_error(s);
 
        if(*f=='E' || *f=='F' || *f=='G' || *f=='X' || *f=='P')
                ucase = true;
@@ -90,7 +90,7 @@ void Fmt::parse(const char *f)
        ++f;
 
        if(*f)
-               throw InvalidParameterValue("Extra characters in conversion specification");
+               throw format_error(s);
 }
 
 Fmt &Fmt::reset()
index ba75958802b7760b6f6b352827e4f313048e717f..8633324b5c0d323d272a194d5e9c68716093b671 100644 (file)
@@ -9,10 +9,19 @@ Distributed under the LGPL
 #define MSP_STRINGS_FMT_H_
 
 #include <ostream>
+#include <stdexcept>
 #include <string>
 
 namespace Msp {
 
+class format_error: public std::logic_error
+{
+public:
+       format_error(const std::string &w): std::logic_error(w) { }
+       virtual ~format_error() throw() { }
+};
+
+
 /**
 Stores formatting information for converting variables into strings.  Can be
 applied to an std::ostream or fed to lexical_cast.  Also used internally by
index dfd3800841033cbafba518b9b1417f193c30ab77..4fa5e2caeaf3eac74f1d1d42bc49625f2e642f2c 100644 (file)
@@ -25,7 +25,7 @@ values have been fed to the formatter.
 const string &Formatter::str() const
 {
        if(pos!=fmt.end())
-               throw Exception("Too few arguments for format");
+               throw format_error("Too few arguments for format");
 
        return result;
 }
@@ -43,7 +43,7 @@ void Formatter::advance()
                {
                        ++pos;
                        if(pos==fmt.end())
-                               throw Exception("Malformed format string");
+                               throw format_error("Malformed format string");
                        if(*pos!='%')
                                break;
                }
@@ -59,7 +59,7 @@ Fmt object.
 Fmt Formatter::get_conversion()
 {
        if(pos==fmt.end())
-               throw Exception("Too many arguments for format");
+               throw format_error("Too many arguments for format");
 
        string::iterator i = pos;
        for(; i!=fmt.end(); ++i)
@@ -67,7 +67,7 @@ Fmt Formatter::get_conversion()
                        break;
 
        if(i==fmt.end())
-               throw Exception("Malformed format string");
+               throw format_error("Malformed format string");
 
        ++i;
        string c(pos, i);