From 1f8b79e6c465008ac56808bcc52cb22456ec7393 Mon Sep 17 00:00:00 2001 From: "SND\\ussrhero_cp" Date: Sun, 4 Jan 2015 23:56:22 +0000 Subject: [PATCH] [0.3.x] added : numVariantL::__float__ method ( automatic convert to float values ) git-svn-id: https://pykd.svn.codeplex.com/svn@89569 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/pymod.cpp | 1 + pykd/variant.h | 14 ++++++++++++-- test/scripts/intbase.py | 13 +++++++++---- 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/pykd/pymod.cpp b/pykd/pymod.cpp index 65a8a5e..1341f3c 100644 --- a/pykd/pymod.cpp +++ b/pykd/pymod.cpp @@ -489,6 +489,7 @@ BOOST_PYTHON_MODULE( pykd ) .def( "__int__", &NumVariantAdaptor::int_ ) .def( "__index__", &NumVariantAdaptor::long_ ) .def( "__hash__", &NumVariantAdaptor::long_ ) + .def( "__float__", &NumVariantAdaptor::float_) .def( "isInteger", &NumVariantAdaptor::isInteger ) ; diff --git a/pykd/variant.h b/pykd/variant.h index 92bb127..0305670 100644 --- a/pykd/variant.h +++ b/pykd/variant.h @@ -26,6 +26,12 @@ public: return var; } + if (PyFloat_Check(obj.ptr())) + { + var->m_variant.setDouble(PyFloat_AsDouble(obj.ptr())); + return var; + } + if ( PyInt_CheckExact( obj.ptr() ) ) { var->m_variant.setLong( PyLong_AsLong( obj.ptr() ) ); @@ -73,10 +79,10 @@ public: return python::object( var.asUInt() ); if ( var.isFloat() ) - return python::object( var.asFloat() ); + return python::object( var.asInt() ); if ( var.isDouble() ) - return python::object( var.asDouble() ); + return python::object( var.asInt() ); return python::object( var.asInt() ); } @@ -214,6 +220,10 @@ public: return convertToPython(var); } + static python::object float_(kdlib::NumBehavior& var) { + return python::object(var.asDouble()); + } + static python::object int_(kdlib::NumBehavior& var) { return convertToPython(var); } diff --git a/test/scripts/intbase.py b/test/scripts/intbase.py index 7cb6e69..42390b7 100644 --- a/test/scripts/intbase.py +++ b/test/scripts/intbase.py @@ -161,17 +161,22 @@ class IntBaseTest( unittest.TestCase ): def testLongConvert( self ): self.assertEqual( "100", "%d" % numVariant(100) ) + self.assertEqual( "64", "%x" % numVariant(100) ) self.assertEqual( "FFFF", "%X" % numVariant(0xFFFF) ) self.assertEqual( "-70000000000", "%d" % numVariant(-70000000000) ) self.assertEqual( "FFFFFFFFFFFFFF", "%X" % numVariant(0xFFFFFFFFFFFFFF) ) self.assertEqual( "0", "%d" % numVariant(False) ) - - def testConvert( self ): - self.assertEqual( "100", "%d" % numVariant(100) ) - self.assertEqual( "64", "%x" % numVariant(100) ) + def testFloatConvert(self): + self.assertEqual( "1.0", "%1.1f" % float(numVariant(1.0))) + self.assertEqual( "1", "%d" % int(numVariant(1.0))) + self.assertEqual( "1.0", "%1.1f" % numVariant(1.0)) + self.assertEqual( "1", "%d" % numVariant(1.0)) + def testStr(self): self.assertEqual( "100", str(numVariant(100)) ) def testHex(self): self.assertEqual( "0x64", hex(numVariant(100)) ) + +