]> git.tdb.fi Git - libs/core.git/blobdiff - source/strings/lexicalcast.cpp
Provide a way to get an integer type matching the size of another type
[libs/core.git] / source / strings / lexicalcast.cpp
index 71e346b7651818f9c91006fdfacaa8dce05613ed..6a226e1d27ac5ff356589c4e59f06c65085ebde4 100644 (file)
@@ -14,16 +14,6 @@ template<typename T>
 struct IsSigned
 { enum { result = !(static_cast<T>(-1)>0) }; };
 
-template<typename T, bool f = (sizeof(T)>sizeof(unsigned long))>
-struct Temporary
-{ typedef unsigned long Type; };
-
-template<typename T>
-struct Temporary<T, true>
-{
-       typedef UInt64 Type;
-};
-
 /* Helper to avoid warnings about an unsigned type never being < 0 */
 template<typename T, bool f = IsSigned<T>::result>
 struct IsNegative
@@ -69,7 +59,7 @@ char *int_to_str(T v, const Fmt &f, char *end)
        const char *digits = (f.get_uppercase() ? udigits : ldigits);
        if(v)
        {
-               typename Temporary<T>::Type w = Absolute<T>::eval(v);
+               typename MatchingInt<T>::UnsignedType w = Absolute<T>::eval(v);
                while(w)
                {
                        *--ptr = digits[w%base];
@@ -544,7 +534,7 @@ void operator<<(LexicalConverter &c, const char *s)
 { c.result(str_to_str(s, c.get_fmt())); }
 
 void operator<<(LexicalConverter &c, const void *p)
-{ c.result(int_to_str(reinterpret_cast<unsigned long>(p), c.get_fmt())); }
+{ c.result(int_to_str(reinterpret_cast<IntPtr>(p), c.get_fmt())); }
 
 
 /*** operator>> ***/