X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fstlplus%2Fstrings%2Fstring_int.hpp;fp=src%2Fstlplus%2Fstrings%2Fstring_int.hpp;h=a45b9821e045de285e6be5329dd37760bbf2f442;hb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c;hp=0000000000000000000000000000000000000000;hpb=85783316365181491a3e3c0c63659972477cebba;p=chaz%2Fyoink diff --git a/src/stlplus/strings/string_int.hpp b/src/stlplus/strings/string_int.hpp new file mode 100644 index 0000000..a45b982 --- /dev/null +++ b/src/stlplus/strings/string_int.hpp @@ -0,0 +1,118 @@ +#ifndef STLPLUS_STRING_INT +#define STLPLUS_STRING_INT +//////////////////////////////////////////////////////////////////////////////// + +// Author: Andy Rushton +// Copyright: (c) Southampton University 1999-2004 +// (c) Andy Rushton 2004-2009 +// License: BSD License, see ../docs/license.html + +// Convert integer types to/from string + +//////////////////////////////////////////////////////////////////////////////// +#include "strings_fixes.hpp" +#include "format_types.hpp" +#include +#include + +namespace stlplus +{ + + //////////////////////////////////////////////////////////////////////////////// + // Conversions of Integer types to string + //////////////////////////////////////////////////////////////////////////////// + + // The radix (i.e. base) for these conversions can be any value from base 2 to base 36 + // specifying any other radix causes std::invalid_argument to be thrown + + // The way in which the radix is displayed is defined in radix_types.hpp + // If any other value is used, std::invalid_argument is thrown + + // The width argument specifies the number of numerical digits to use in the result + // This is a minimum - if the value requires more digits then it will be wider than the width argument + // However, if it is smaller, then it will be extended to the specified width + // Then, the radix display prefix is added to this width + + // For example, using the hash representation of 0 in hex with width=4 gives: + // 16#0000 - so there's 4 digits in the number part + + std::string short_to_string(short i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + std::string unsigned_short_to_string(unsigned short i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + std::string int_to_string(int i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + std::string unsigned_to_string(unsigned i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + std::string long_to_string(long i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + std::string unsigned_long_to_string(unsigned long i, + unsigned radix = 10, + radix_display_t display = radix_c_style_or_hash, + unsigned width = 0) + throw(std::invalid_argument); + + //////////////////////////////////////////////////////////////////////////////// + // Convert a string to an integer type + //////////////////////////////////////////////////////////////////////////////// + // supports all the formats described above for the reverse conversion + // If the radix is set to zero, the conversions deduce the radix from the string representation + // So, + // 0b prefix is binary, + // 0 prefix is octal, + // 0x is hex + // # prefix is my hash format + // The radix must be either zero as explained above, or in the range 2 to 16 + // A non-zero radix should be used when the string value has no radix information and is non-decimal + // e.g. the hex value FEDCBA has no indication that it is hex, so specify radix 16 + // Any other value of radix will cause std::invalid_argument to be thrown + + short string_to_short(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + unsigned short string_to_unsigned_short(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + int string_to_int(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + unsigned string_to_unsigned(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + long string_to_long(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + unsigned long string_to_unsigned_long(const std::string& value, + unsigned radix = 0) + throw(std::invalid_argument); + + //////////////////////////////////////////////////////////////////////////////// + +} // end namespace stlplus + +#endif