Changeset 53

Show
Ignore:
Timestamp:
12/10/06 19:05:51 (2 years ago)
Author:
KirkMcDonald
Message:

Expanded rawexample

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/examples/rawexample/rawexample.d

    r46 r53  
    44import python; 
    55import std.stdio; 
     6 
     7static PyTypeObject Base_type; 
     8static PyTypeObject Derived_type; 
     9 
     10struct Base_object { 
     11    mixin PyObject_HEAD; 
     12} 
     13 
     14struct Derived_object { 
     15    mixin PyObject_HEAD; 
     16} 
     17 
     18extern(C) 
     19PyObject* Base_foo(PyObject* self, PyObject* args) { 
     20    writefln("Base.foo"); 
     21    Py_INCREF(Py_None); 
     22    return Py_None; 
     23} 
     24 
     25extern(C) 
     26PyObject* Base_bar(PyObject* self, PyObject* args) { 
     27    writefln("Base.bar"); 
     28    Py_INCREF(Py_None); 
     29    return Py_None; 
     30} 
     31 
     32PyMethodDef[] Base_methods = [ 
     33    {"foo", &Base_foo, METH_VARARGS, ""}, 
     34    {"bar", &Base_bar, METH_VARARGS, ""}, 
     35    {null, null, 0, null} 
     36]; 
     37 
     38extern(C) 
     39PyObject* Derived_bar(PyObject* self, PyObject* args) { 
     40    writefln("Derived.bar"); 
     41    Py_INCREF(Py_None); 
     42    return Py_None; 
     43} 
     44 
     45PyMethodDef[] Derived_methods = [ 
     46    {"bar", &Derived_bar, METH_VARARGS, ""}, 
     47    {null, null, 0, null} 
     48]; 
    649 
    750extern(C) 
     
    1962extern(C) 
    2063export void initrawexample() { 
    21     Py_InitModule("rawexample", rawexample_methods); 
     64    PyObject* m = Py_InitModule("rawexample", rawexample_methods); 
     65 
     66    Base_type.ob_type = PyType_Type_p; 
     67    Base_type.tp_basicsize = Base_object.sizeof; 
     68    Base_type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE; 
     69    Base_type.tp_methods = Base_methods.ptr; 
     70    Base_type.tp_name = "rawexample.Base"; 
     71    Base_type.tp_new = &PyType_GenericNew; 
     72    PyType_Ready(&Base_type); 
     73    Py_INCREF(cast(PyObject*)&Base_type); 
     74    PyModule_AddObject(m, "Base", cast(PyObject*)&Base_type); 
     75 
     76    Derived_type.ob_type = PyType_Type_p; 
     77    Derived_type.tp_basicsize = Derived_object.sizeof; 
     78    Derived_type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE; 
     79    Derived_type.tp_methods = Derived_methods.ptr; 
     80    Derived_type.tp_name = "rawexample.Derived"; 
     81    Derived_type.tp_new = &PyType_GenericNew; 
     82    Derived_type.tp_base = &Base_type; 
     83    PyType_Ready(&Derived_type); 
     84    Py_INCREF(cast(PyObject*)&Derived_type); 
     85    PyModule_AddObject(m, "Derived", cast(PyObject*)&Derived_type); 
    2286} 
    2387 
  • trunk/examples/rawexample/test.py

    r46 r53  
    1313rawexample.hello() 
    1414 
     15b = rawexample.Base() 
     16d = rawexample.Derived() 
     17 
     18b.foo() 
     19b.bar() 
     20d.foo() 
     21d.bar() 
     22