Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
VTK
VTK
Commits
45abed45
Commit
45abed45
authored
Jul 23, 2015
by
David Gobbi
Browse files
Update the PyVTKTemplate type object.
This allowed me to remove its custom GetAttr method.
parent
c14475e3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Wrapping/PythonCore/PyVTKTemplate.cxx
View file @
45abed45
...
...
@@ -23,6 +23,8 @@
#include
"PyVTKTemplate.h"
#include
"vtkPythonUtil.h"
#include
<structmember.h>
// a python header
// Silence warning like
// "dereferencing type-punned pointer will break strict-aliasing rules"
// it happens because this kind of expression: (long *)&ptr
...
...
@@ -39,7 +41,7 @@ static const char *PyVTKTemplate_Doc =
"in square brackets to get the desired kind of class.
\n
"
;
//--------------------------------------------------------------------
//
m
ethods fr
om
python
//
M
ethods f
o
r python
static
PyObject
*
PyVTKTemplate_HasKey
(
PyObject
*
ob
,
PyObject
*
args
)
{
...
...
@@ -121,6 +123,21 @@ static PyMethodDef PyVTKTemplate_Methods[] = {
{
NULL
,
NULL
,
0
,
NULL
}
};
//--------------------------------------------------------------------
// Members for python
static
PyMemberDef
PyVTKTemplate_Members
[]
=
{
{(
char
*
)
"__doc__"
,
T_OBJECT
,
offsetof
(
PyVTKTemplate
,
doc
),
READONLY
,
NULL
},
{(
char
*
)
"__name__"
,
T_OBJECT
,
offsetof
(
PyVTKTemplate
,
name
),
READONLY
,
NULL
},
{(
char
*
)
"__module__"
,
T_OBJECT
,
offsetof
(
PyVTKTemplate
,
module
),
READONLY
,
NULL
},
{(
char
*
)
"__bases__"
,
T_OBJECT
,
offsetof
(
PyVTKTemplate
,
bases
),
READONLY
,
NULL
},
{
NULL
,
0
,
0
,
0
,
NULL
}
};
//--------------------------------------------------------------------
// Mapping protocol
...
...
@@ -232,22 +249,14 @@ static PyMappingMethods PyVTKTemplate_AsMapping = {
static
int
PyVTKTemplate_Traverse
(
PyObject
*
o
,
visitproc
visit
,
void
*
arg
)
{
PyVTKTemplate
*
self
=
(
PyVTKTemplate
*
)
o
;
PyObject
*
members
[
2
];
int
err
=
0
;
int
i
;
members
[
0
]
=
self
->
dict
;
members
[
1
]
=
self
->
doc
;
for
(
i
=
0
;
i
<
2
&&
err
==
0
;
i
++
)
{
if
(
members
[
i
])
{
err
=
visit
(
members
[
i
],
arg
);
}
}
Py_VISIT
(
self
->
dict
);
Py_VISIT
(
self
->
doc
);
Py_VISIT
(
self
->
name
);
Py_VISIT
(
self
->
module
);
Py_VISIT
(
self
->
bases
);
return
err
;
return
0
;
}
//--------------------------------------------------------------------
...
...
@@ -257,6 +266,9 @@ static void PyVTKTemplate_Delete(PyObject *op)
Py_DECREF
(((
PyVTKTemplate
*
)
op
)
->
dict
);
Py_DECREF
(((
PyVTKTemplate
*
)
op
)
->
doc
);
Py_DECREF
(((
PyVTKTemplate
*
)
op
)
->
name
);
Py_DECREF
(((
PyVTKTemplate
*
)
op
)
->
module
);
Py_DECREF
(((
PyVTKTemplate
*
)
op
)
->
bases
);
PyObject_GC_Del
(
op
);
}
...
...
@@ -265,11 +277,11 @@ static void PyVTKTemplate_Delete(PyObject *op)
static
PyObject
*
PyVTKTemplate_Repr
(
PyObject
*
op
)
{
PyVTKTemplate
*
self
=
(
PyVTKTemplate
*
)
op
;
char
buf
[
512
];
sprintf
(
buf
,
"<%.80s %.80s.%.80s>"
,
op
->
ob_type
->
tp_name
,
self
->
module
,
self
->
name
);
return
PyString_FromString
(
buf
);
return
PyString_FromFormat
(
"<%s %s.%s>"
,
op
->
ob_type
->
tp_name
,
PyString_AS_STRING
(
self
->
module
),
PyString_AS_STRING
(
self
->
name
));
}
//--------------------------------------------------------------------
...
...
@@ -282,49 +294,6 @@ static PyObject *PyVTKTemplate_Call(PyObject *, PyObject *, PyObject *)
return
NULL
;
}
//--------------------------------------------------------------------
static
PyObject
*
PyVTKTemplate_GetAttr
(
PyObject
*
self
,
PyObject
*
attr
)
{
char
text
[
256
];
char
*
name
=
PyString_AsString
(
attr
);
PyVTKTemplate
*
op
=
(
PyVTKTemplate
*
)
self
;
PyMethodDef
*
meth
;
if
(
name
[
0
]
==
'_'
)
{
if
(
strcmp
(
name
,
"__name__"
)
==
0
)
{
return
PyString_FromString
(
op
->
name
);
}
if
(
strcmp
(
name
,
"__module__"
)
==
0
)
{
return
PyString_FromString
(
op
->
module
);
}
if
(
strcmp
(
name
,
"__doc__"
)
==
0
)
{
Py_INCREF
(
op
->
doc
);
return
op
->
doc
;
}
if
(
strcmp
(
name
,
"__bases__"
)
==
0
)
{
return
Py_BuildValue
(
"()"
);
}
}
for
(
meth
=
PyVTKTemplate_Methods
;
meth
&&
meth
->
ml_name
;
meth
++
)
{
if
(
strcmp
(
name
,
meth
->
ml_name
)
==
0
)
{
return
PyCFunction_New
(
meth
,
self
);
}
}
sprintf
(
text
,
"'%.80s' object has no attribute '%.80s'"
,
self
->
ob_type
->
tp_name
,
name
);
PyErr_SetString
(
PyExc_AttributeError
,
text
);
return
NULL
;
}
//--------------------------------------------------------------------
PyTypeObject
PyVTKTemplate_Type
=
{
PyObject_HEAD_INIT
(
&
PyType_Type
)
...
...
@@ -344,7 +313,7 @@ PyTypeObject PyVTKTemplate_Type = {
0
,
// tp_hash
PyVTKTemplate_Call
,
// tp_call
0
,
// tp_string
Py
VTKTemplate_
GetAttr
,
// tp_getattro
Py
Object_Generic
GetAttr
,
// tp_getattro
0
,
// tp_setattro
0
,
// tp_as_buffer
Py_TPFLAGS_CHECKTYPES
|
Py_TPFLAGS_HAVE_GC
|
Py_TPFLAGS_DEFAULT
,
// tp_flags
...
...
@@ -356,7 +325,7 @@ PyTypeObject PyVTKTemplate_Type = {
0
,
// tp_iter
0
,
// tp_iternext
PyVTKTemplate_Methods
,
// tp_methods
0
,
// tp_members
PyVTKTemplate_Members
,
// tp_members
0
,
// tp_getset
0
,
// tp_base
0
,
// tp_dict
...
...
@@ -366,7 +335,7 @@ PyTypeObject PyVTKTemplate_Type = {
0
,
// tp_init
0
,
// tp_alloc
0
,
// tp_new
PyObject_Del
,
// tp_free
0
,
// tp_free
0
,
// tp_is_gc
0
,
// tp_bases
0
,
// tp_mro
...
...
@@ -376,20 +345,21 @@ PyTypeObject PyVTKTemplate_Type = {
VTK_WRAP_PYTHON_SUPPRESS_UNINITIALIZED
};
//--------------------------------------------------------------------
// C API
//--------------------------------------------------------------------
PyObject
*
PyVTKTemplate_New
(
const
char
*
name
,
const
char
*
modulename
,
const
char
*
docstring
[])
{
PyObject
*
doc
=
vtkPythonUtil
::
BuildDocString
(
docstring
);
PyObject
*
dict
=
PyDict_New
();
PyVTKTemplate
*
op
=
PyObject_GC_New
(
PyVTKTemplate
,
&
PyVTKTemplate_Type
);
PyObject
*
self
=
(
PyObject
*
)
op
;
op
->
dict
=
dict
;
op
->
doc
=
doc
;
op
->
name
=
name
;
op
->
module
=
modulename
;
op
->
dict
=
PyDict_New
();
op
->
doc
=
vtkPythonUtil
::
BuildDocString
(
docstring
);
op
->
name
=
PyString_FromString
(
name
);
op
->
module
=
PyString_FromString
(
modulename
);
op
->
bases
=
PyTuple_New
(
0
);
PyObject_GC_Track
(
self
);
...
...
Wrapping/PythonCore/PyVTKTemplate.h
View file @
45abed45
...
...
@@ -32,8 +32,9 @@ struct PyVTKTemplate {
PyObject_HEAD
PyObject
*
dict
;
PyObject
*
doc
;
const
char
*
name
;
const
char
*
module
;
PyObject
*
name
;
PyObject
*
module
;
PyObject
*
bases
;
// this is just a hint for help()
};
extern
VTKWRAPPINGPYTHONCORE_EXPORT
PyTypeObject
PyVTKTemplate_Type
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment