from string conversion throws exception in case of failure
This commit is contained in:
		@@ -9,6 +9,9 @@
 | 
			
		||||
    @license LGPL, see file <a href="license.html">COPYING</a>
 | 
			
		||||
 | 
			
		||||
    $Log$
 | 
			
		||||
    Revision 1.4  2004/12/20 13:24:08  marc
 | 
			
		||||
    from string conversion throws exception in case of failure
 | 
			
		||||
 | 
			
		||||
    Revision 1.3  2004/12/20 07:40:36  marc
 | 
			
		||||
    documentation improved, new grouping
 | 
			
		||||
 | 
			
		||||
@@ -23,10 +26,10 @@
 | 
			
		||||
#ifndef __MRW__STRING__HPP__
 | 
			
		||||
#define __MRW__STRING__HPP__
 | 
			
		||||
 | 
			
		||||
#include <mrw/exception.hpp>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace mrw {
 | 
			
		||||
  
 | 
			
		||||
  /** @defgroup StdExt Extensions for C++ Standard Libraries
 | 
			
		||||
@@ -116,6 +119,10 @@ namespace mrw {
 | 
			
		||||
      operators. If you don't want this, just don't include any of
 | 
			
		||||
      these include files files. There's no impact from this module,
 | 
			
		||||
      if you don't include a header, since all code is inline.
 | 
			
		||||
 | 
			
		||||
      @note The signature of some string functions has changed:
 | 
			
		||||
            They may now throw exceptions if conversion fails!
 | 
			
		||||
            (since 1.4.1)
 | 
			
		||||
  */
 | 
			
		||||
  //@{
 | 
			
		||||
  /** @defgroup stdextstring String extensions
 | 
			
		||||
@@ -146,6 +153,10 @@ namespace mrw {
 | 
			
		||||
         s += 4;
 | 
			
		||||
         s = 13.5 + s + 24.8;
 | 
			
		||||
         @endcode
 | 
			
		||||
 | 
			
		||||
      @note The signature of some string functions has changed:
 | 
			
		||||
            They may now throw exceptions if conversion fails!
 | 
			
		||||
            (since 1.4.1)
 | 
			
		||||
  */
 | 
			
		||||
  //@{
 | 
			
		||||
 | 
			
		||||
@@ -159,7 +170,6 @@ namespace mrw {
 | 
			
		||||
      @param o a value to be converted to std::string
 | 
			
		||||
      @pre #include <mrw/string.hpp>
 | 
			
		||||
      @pre T must support operator<< to a stream
 | 
			
		||||
 | 
			
		||||
  */
 | 
			
		||||
  template <typename T> std::string string(const T& o)
 | 
			
		||||
    throw(std::bad_exception) {
 | 
			
		||||
@@ -174,14 +184,20 @@ namespace mrw {
 | 
			
		||||
      int i = mrw::to<int>("15");
 | 
			
		||||
      @endcode
 | 
			
		||||
 | 
			
		||||
      @throw mrw::invalid_argument if value can not be created from string
 | 
			
		||||
      @param s the string where a value of type @c T is extracted from
 | 
			
		||||
      @pre #include <mrw/string.hpp>
 | 
			
		||||
      @pre T must support operator>> from a stream
 | 
			
		||||
      @pre operator>> from T must not throw anything else than std::exception
 | 
			
		||||
 | 
			
		||||
      @note The signature has changed:
 | 
			
		||||
            It may now throw exceptions if conversion fails!
 | 
			
		||||
            (since 1.4.1)
 | 
			
		||||
  */
 | 
			
		||||
  template <typename T> T to(const std::string& s) throw(std::bad_exception) {
 | 
			
		||||
  template <typename T> T to(const std::string& s) throw(std::exception) {
 | 
			
		||||
    T o;
 | 
			
		||||
    std::stringstream ss(s);
 | 
			
		||||
    ss>>o;
 | 
			
		||||
    if (!(ss>>o)) throw mrw::invalid_argument(s);
 | 
			
		||||
    return o;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -224,6 +240,7 @@ template <typename T> std::string& operator<<(std::string& s, const T& o)
 | 
			
		||||
    // now: s1=="" s2=="length:" i==15 s3=="mm"
 | 
			
		||||
    @endcode
 | 
			
		||||
 | 
			
		||||
    @throw mrw::invalid_argument if value can not be created from string
 | 
			
		||||
    @param s the string, from which o is extracted
 | 
			
		||||
    @param o the value to extract from s
 | 
			
		||||
    @note when something is extracted from a string, it is removed
 | 
			
		||||
@@ -231,11 +248,15 @@ template <typename T> std::string& operator<<(std::string& s, const T& o)
 | 
			
		||||
    shortened by the shifted element
 | 
			
		||||
    @pre #include <mrw/string.hpp>
 | 
			
		||||
    @pre T must support operator>> from a stream
 | 
			
		||||
 | 
			
		||||
    @note The signature has changed:
 | 
			
		||||
          It may now throw exceptions if conversion fails!
 | 
			
		||||
          (since 1.4.1)
 | 
			
		||||
*/
 | 
			
		||||
template <typename T> std::string& operator>>(std::string& s, T& o)
 | 
			
		||||
  throw(std::bad_exception) {
 | 
			
		||||
  throw(std::exception) {
 | 
			
		||||
  std::stringstream ss(s);
 | 
			
		||||
  ss>>o;
 | 
			
		||||
  if (!(ss>>o)) throw mrw::invalid_argument(s);
 | 
			
		||||
  return (s=ss.tellg()>0?s.substr(ss.tellg()):"");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user