[0.3.x] updated: variant class

git-svn-id: https://pykd.svn.codeplex.com/svn@83751 9b283d60-5439-405e-af05-b73fd8c4d996
This commit is contained in:
SND\kernelnet_cp 2013-05-22 06:25:24 +00:00 committed by Mikhail I. Izmestev
parent e079fc98eb
commit df525b6973
3 changed files with 74 additions and 76 deletions

View File

@ -5,7 +5,7 @@
namespace pykd { namespace pykd {
struct Module : public kdlib::Module struct ModuleAdaptor : public kdlib::Module
{ {
static kdlib::ModulePtr loadModuleByName( const std::wstring &name ) static kdlib::ModulePtr loadModuleByName( const std::wstring &name )
@ -22,9 +22,6 @@ struct Module : public kdlib::Module
return L"PYKD MODULE"; return L"PYKD MODULE";
} }
//static kdlib::MEMOFFSET_64 convertToLong( kdlib::Module& module ) {
// return module.getBase();
//}
}; };
} // end namespace pykd } // end namespace pykd

View File

@ -322,44 +322,44 @@ BOOST_PYTHON_MODULE( pykd )
// python::def( "setSymbolPath", &setSymbolPath, "Set current symbol path"); // python::def( "setSymbolPath", &setSymbolPath, "Set current symbol path");
// python::def( "appendSymbolPath", &appendSymbolPath, "Append current symbol path"); // python::def( "appendSymbolPath", &appendSymbolPath, "Append current symbol path");
python::class_<kdlib::NumVariantGetter, boost::noncopyable>( "numVariant", "numVariant", python::no_init ) python::class_<kdlib::NumBehavior, boost::noncopyable>( "numVariant", "numVariant", python::no_init )
.def("__init__", python::make_constructor(&NumVariant::getVariant) ) .def("__init__", python::make_constructor(&NumVariantAdaptor::getVariant) )
.def( "__eq__", &NumVariant::eq ) .def( "__eq__", &NumVariantAdaptor::eq )
.def( "__ne__", &NumVariant::ne) .def( "__ne__", &NumVariantAdaptor::ne)
.def( "__lt__", &NumVariant::lt) .def( "__lt__", &NumVariantAdaptor::lt)
.def( "__gt__", &NumVariant::gt ) .def( "__gt__", &NumVariantAdaptor::gt )
.def( "__le__", &NumVariant::le ) .def( "__le__", &NumVariantAdaptor::le )
.def( "__ge__", &NumVariant::ge ) .def( "__ge__", &NumVariantAdaptor::ge )
.def( "__add__", &NumVariant::add ) .def( "__add__", &NumVariantAdaptor::add )
.def( "__radd__", &NumVariant::add ) .def( "__radd__", &NumVariantAdaptor::add )
.def( "__sub__", &NumVariant::sub ) .def( "__sub__", &NumVariantAdaptor::sub )
.def( "__rsub__", &NumVariant::rsub ) .def( "__rsub__", &NumVariantAdaptor::rsub )
.def( "__mul__", &NumVariant::mul ) .def( "__mul__", &NumVariantAdaptor::mul )
.def( "__rmul__", &NumVariant::mul ) .def( "__rmul__", &NumVariantAdaptor::mul )
.def( "__div__", &NumVariant::div ) .def( "__div__", &NumVariantAdaptor::div )
.def( "__rdiv__", &NumVariant::rdiv ) .def( "__rdiv__", &NumVariantAdaptor::rdiv )
.def( "__mod__", &NumVariant::mod ) .def( "__mod__", &NumVariantAdaptor::mod )
.def( "__rmod__", &NumVariant::rmod ) .def( "__rmod__", &NumVariantAdaptor::rmod )
.def( "__rshift__", &NumVariant::rshift ) .def( "__rshift__", &NumVariantAdaptor::rshift )
.def( "__rrshift__", &NumVariant::rrshift ) .def( "__rrshift__", &NumVariantAdaptor::rrshift )
.def( "__lshift__", &NumVariant::lshift ) .def( "__lshift__", &NumVariantAdaptor::lshift )
.def( "__rlshift__", &NumVariant::rlshift ) .def( "__rlshift__", &NumVariantAdaptor::rlshift )
.def( "__and__", &NumVariant::and ) .def( "__and__", &NumVariantAdaptor::and )
.def( "__rand__", &NumVariant::and ) .def( "__rand__", &NumVariantAdaptor::and )
.def( "__or__", &NumVariant::or ) .def( "__or__", &NumVariantAdaptor::or )
.def( "__ror__", &NumVariant::or ) .def( "__ror__", &NumVariantAdaptor::or )
.def( "__xor__", &NumVariant::xor ) .def( "__xor__", &NumVariantAdaptor::xor )
.def( "__rxor__", &NumVariant::xor ) .def( "__rxor__", &NumVariantAdaptor::xor )
.def( "__neg__", &NumVariant::neg ) .def( "__neg__", &NumVariantAdaptor::neg )
.def( "__pos__", &NumVariant::pos ) .def( "__pos__", &NumVariantAdaptor::pos )
.def( "__invert__", &NumVariant::invert ) .def( "__invert__", &NumVariantAdaptor::invert )
.def( "__nonzero__", &NumVariant::nonzero ) .def( "__nonzero__", &NumVariantAdaptor::nonzero )
//.def( "__str__", &pykd::NumVariant::str ) //.def( "__str__", &pykd::NumVariant::str )
// .def( "__hex__", &pykd::NumVariant::hex ) // .def( "__hex__", &pykd::NumVariant::hex )
.def( "__long__", &NumVariant::long_ ) .def( "__long__", &NumVariantAdaptor::long_ )
.def( "__int__", &NumVariant::int_ ) .def( "__int__", &NumVariantAdaptor::int_ )
.def( "__index__", &NumVariant::long_ ) .def( "__index__", &NumVariantAdaptor::long_ )
.def( "__hash__", &NumVariant::long_ ) .def( "__hash__", &NumVariantAdaptor::long_ )
; ;
//python::implicitly_convertible<kdlib::NumVariantGetter, unsigned long long>(); //python::implicitly_convertible<kdlib::NumVariantGetter, unsigned long long>();
@ -367,9 +367,9 @@ python::class_<kdlib::NumVariantGetter, boost::noncopyable>( "numVariant", "numV
//python::implicitly_convertible<kdlib::NumVariantGetter, unsigned long>(); //python::implicitly_convertible<kdlib::NumVariantGetter, unsigned long>();
//python::implicitly_convertible<kdlib::NumVariantGetter, long>(); //python::implicitly_convertible<kdlib::NumVariantGetter, long>();
python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumVariantGetter>, boost::noncopyable>("module", "Class representing executable module", python::no_init ) python::class_<kdlib::Module, kdlib::ModulePtr, python::bases<kdlib::NumBehavior>, boost::noncopyable>("module", "Class representing executable module", python::no_init )
.def("__init__", python::make_constructor(&Module::loadModuleByName ) ) .def("__init__", python::make_constructor(&ModuleAdaptor::loadModuleByName ) )
.def("__init__", python::make_constructor(&Module::loadModuleByOffset) ) .def("__init__", python::make_constructor(&ModuleAdaptor::loadModuleByOffset) )
.def("begin", &kdlib::Module::getBase, .def("begin", &kdlib::Module::getBase,
"Return start address of the module" ) "Return start address of the module" )
.def("end", &kdlib::Module::getEnd, .def("end", &kdlib::Module::getEnd,
@ -429,7 +429,7 @@ python::class_<kdlib::NumVariantGetter, boost::noncopyable>( "numVariant", "numV
// "Return tuple of the module's file version" ) // "Return tuple of the module's file version" )
.def("__getattr__", &kdlib::Module::getSymbolVa, .def("__getattr__", &kdlib::Module::getSymbolVa,
"Return address of the symbol" ) "Return address of the symbol" )
.def( "__str__", &Module::print ); .def( "__str__", &ModuleAdaptor::print );

View File

@ -4,14 +4,15 @@
namespace pykd { namespace pykd {
class NumVariant : public kdlib::NumVariantGetter class NumVariantAdaptor : public kdlib::NumBehavior
{ {
public: public:
static kdlib::NumVariantGetter* getVariant( const python::object &obj )
static kdlib::NumBehavior* NumVariantAdaptor::getVariant( const python::object &obj )
{ {
NumVariant* var = new NumVariant(); NumVariantAdaptor* var = new NumVariantAdaptor();
if ( PyBool_Check( obj.ptr() ) ) if ( PyBool_Check( obj.ptr() ) )
{ {
@ -36,9 +37,9 @@ public:
return var; return var;
} }
static python::object convertToPython( kdlib::NumVariantGetter& v ) static python::object NumVariantAdaptor::convertToPython( kdlib::NumBehavior& num )
{ {
kdlib::NumVariant var = v; kdlib::NumVariant var = kdlib::NumVariant( num );
if ( var.isChar() ) if ( var.isChar() )
return python::object( var.asInt() ); return python::object( var.asInt() );
@ -81,111 +82,111 @@ public:
public: public:
static python::object eq( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object eq( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) == obj; return convertToPython(var) == obj;
} }
static python::object ne( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object ne( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) != obj; return convertToPython(var) != obj;
} }
static python::object lt( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object lt( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) < obj; return convertToPython(var) < obj;
} }
static python::object gt( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object gt( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) > obj; return convertToPython(var) > obj;
} }
static python::object le( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object le( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) <= obj; return convertToPython(var) <= obj;
} }
static python::object ge( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object ge( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) >= obj; return convertToPython(var) >= obj;
} }
static python::object add( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object add( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) + obj; return convertToPython(var) + obj;
} }
static python::object sub( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object sub( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) - obj; return convertToPython(var) - obj;
} }
static python::object rsub( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rsub( kdlib::NumBehavior& var, python::object& obj ) {
return obj - convertToPython(var); return obj - convertToPython(var);
} }
static python::object mul( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object mul( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) * obj; return convertToPython(var) * obj;
} }
static python::object div( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object div( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) / obj; return convertToPython(var) / obj;
} }
static python::object rdiv( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rdiv( kdlib::NumBehavior& var, python::object& obj ) {
return obj / convertToPython(var); return obj / convertToPython(var);
} }
static python::object mod( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object mod( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) % obj; return convertToPython(var) % obj;
} }
static python::object rmod( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rmod( kdlib::NumBehavior& var, python::object& obj ) {
return obj % convertToPython(var); return obj % convertToPython(var);
} }
static python::object rshift( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rshift( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) >> obj; return convertToPython(var) >> obj;
} }
static python::object rrshift( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rrshift( kdlib::NumBehavior& var, python::object& obj ) {
return obj >> convertToPython(var); return obj >> convertToPython(var);
} }
static python::object lshift( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object lshift( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) << obj; return convertToPython(var) << obj;
} }
static python::object rlshift( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object rlshift( kdlib::NumBehavior& var, python::object& obj ) {
return obj << convertToPython(var); return obj << convertToPython(var);
} }
static python::object and( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object and( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) & obj; return convertToPython(var) & obj;
} }
static python::object or( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object or( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) | obj; return convertToPython(var) | obj;
} }
static python::object xor( kdlib::NumVariantGetter& var, python::object& obj ) { static python::object xor( kdlib::NumBehavior& var, python::object& obj ) {
return convertToPython(var) ^ obj; return convertToPython(var) ^ obj;
} }
static python::object neg(kdlib::NumVariantGetter& var) { static python::object neg(kdlib::NumBehavior& var) {
return 0 - convertToPython(var); return 0 - convertToPython(var);
} }
static python::object pos(kdlib::NumVariantGetter& var) { static python::object pos(kdlib::NumBehavior& var) {
return 0 + convertToPython(var); return 0 + convertToPython(var);
} }
static python::object invert(kdlib::NumVariantGetter& var) { static python::object invert(kdlib::NumBehavior& var) {
return convertToPython(var) ^ convertToPython(var); return convertToPython(var) ^ convertToPython(var);
} }
static python::object nonzero(kdlib::NumVariantGetter& var) { static python::object nonzero(kdlib::NumBehavior& var) {
return convertToPython(var) != 0; return convertToPython(var) != 0;
} }
static python::object long_(kdlib::NumVariantGetter& var ) { static python::object long_(kdlib::NumBehavior& var ) {
return convertToPython(var); return convertToPython(var);
} }
static python::object int_(kdlib::NumVariantGetter& var) { static python::object int_(kdlib::NumBehavior& var) {
return convertToPython(var); return convertToPython(var);
} }