]> git.saurik.com Git - wxWidgets.git/commitdiff
Specialize std::numeric_limits<> for wxLongLong and wxULongLong.
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 26 Apr 2011 22:56:50 +0000 (22:56 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 26 Apr 2011 22:56:50 +0000 (22:56 +0000)
numeric_limits<> should be specialized for number-like types to allow using
them in a similar way to the built-in types.

Closes #13162.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@67610 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/longlong.h
tests/longlong/longlongtest.cpp

index 71cb62bd4af73cb0f73b3804b7edf46f14990b04..b90bd71873dd997ef6fdec26e84aca07ee93a3da 100644 (file)
@@ -1075,6 +1075,31 @@ WXDLLIMPEXP_BASE class wxTextInputStream &operator>>(class wxTextInputStream &st
 
 #endif
 
+// ----------------------------------------------------------------------------
+// Specialize numeric_limits<> for our long long wrapper classes.
+// ----------------------------------------------------------------------------
+
+#if wxUSE_LONGLONG_NATIVE
+
+#include <limits>
+
+namespace std
+{
+
+template<> class numeric_limits<wxLongLong>
+    : public numeric_limits<wxLongLong_t>
+{
+};
+
+template<> class numeric_limits<wxULongLong>
+    : public numeric_limits<wxULongLong_t>
+{
+};
+
+} // namespace std
+
+#endif // wxUSE_LONGLONG_NATIVE
+
 #endif // wxUSE_LONGLONG
 
 #endif // _WX_LONGLONG_H
index f7790a1658bd69d2fa9582408f7559d0134835f5..f8bbc6c5f51dd205bc0b1f7208925e1de97d69da 100644 (file)
@@ -69,6 +69,7 @@ private:
         CPPUNIT_TEST( BitOperations );
         CPPUNIT_TEST( ToString );
         CPPUNIT_TEST( LoHi );
+        CPPUNIT_TEST( Limits );
     CPPUNIT_TEST_SUITE_END();
 
     void Conversion();
@@ -79,6 +80,7 @@ private:
     void BitOperations();
     void ToString();
     void LoHi();
+    void Limits();
 
     DECLARE_NO_COPY_CLASS(LongLongTestCase)
 };
@@ -337,4 +339,15 @@ void LongLongTestCase::LoHi()
     CPPUNIT_ASSERT_EQUAL( 987u, ull.GetHi() );
 }
 
+void LongLongTestCase::Limits()
+{
+#if wxUSE_LONGLONG_NATIVE
+    CPPUNIT_ASSERT( std::numeric_limits<wxLongLong>::is_specialized );
+    CPPUNIT_ASSERT( std::numeric_limits<wxULongLong>::is_specialized );
+
+    wxULongLong maxval = std::numeric_limits<wxULongLong>::max();
+    CPPUNIT_ASSERT( maxval.ToDouble() > 0 );
+#endif // wxUSE_LONGLONG_NATIVE
+}
+
 #endif // wxUSE_LONGLONG