/*=========================================================================Program: Visualization ToolkitModule: vtkPythonStdStreamCaptureHelper.hCopyright (c) Ken Martin, Will Schroeder, Bill LorensenAll rights reserved.See Copyright.txt or http://www.kitware.com/Copyright.htm for details.This software is distributed WITHOUT ANY WARRANTY; without eventhe implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULARPURPOSE. See the above copyright notice for more information.=========================================================================*//*** @class vtkPythonStdStreamCaptureHelper**/#ifndef vtkPythonStdStreamCaptureHelper_h#define vtkPythonStdStreamCaptureHelper_h#include "structmember.h"#include "vtkPythonInterpreter.h"struct vtkPythonStdStreamCaptureHelper{PyObject_HEADint softspace; // Used by print to keep track of its state.bool DumpToError;void Write(const char* string){if (this->DumpToError){vtkPythonInterpreter::WriteStdErr(string);}else{vtkPythonInterpreter::WriteStdOut(string);}}void Flush(){if (this->DumpToError){vtkPythonInterpreter::FlushStdErr();}else{vtkPythonInterpreter::FlushStdOut();}}vtkStdString Read() { return vtkPythonInterpreter::ReadStdin(); }void Close() { this->Flush(); }};static PyObject* vtkWrite(PyObject* self, PyObject* args);static PyObject* vtkRead(PyObject* self, PyObject* args);static PyObject* vtkFlush(PyObject* self, PyObject* args);static PyObject* vtkClose(PyObject* self, PyObject* args);// const_cast since older versions of python are not const correct.static PyMethodDef vtkPythonStdStreamCaptureHelperMethods[] = {{ const_cast<char*>("write"), vtkWrite, METH_VARARGS, const_cast<char*>("Dump message") },{ const_cast<char*>("readline"), vtkRead, METH_VARARGS, const_cast<char*>("Read input line") },{ const_cast<char*>("flush"), vtkFlush, METH_VARARGS, const_cast<char*>("Flush") },{ const_cast<char*>("close"), vtkClose, METH_VARARGS, const_cast<char*>("Close") }, { 0, 0, 0, 0 }};static PyObject* vtkPythonStdStreamCaptureHelperNew(PyTypeObject* type, PyObject* /*args*/, PyObject* /*kwds*/){return type->tp_alloc(type, 0);}static PyMemberDef vtkPythonStdStreamCaptureHelperMembers[] = {{ const_cast<char*>("softspace"), T_INT, offsetof(vtkPythonStdStreamCaptureHelper, softspace), 0,const_cast<char*>("Placeholder so print can keep state.") },{ 0, 0, 0, 0, 0 }};static PyTypeObject vtkPythonStdStreamCaptureHelperType = {#if PY_VERSION_HEX >= 0x02060000PyVarObject_HEAD_INIT(&PyType_Type, 0)#elsePyObject_HEAD_INIT(&PyType_Type) 0,#endif"vtkPythonStdStreamCaptureHelper", // tp_namesizeof(vtkPythonStdStreamCaptureHelper), // tp_basicsize0, // tp_itemsize0, // tp_dealloc0, // tp_print0, // tp_getattr0, // tp_setattr0, // tp_compare0, // tp_repr0, // tp_as_number0, // tp_as_sequence0, // tp_as_mapping0, // tp_hash0, // tp_call0, // tp_strPyObject_GenericGetAttr, // tp_getattroPyObject_GenericSetAttr, // tp_setattro0, // tp_as_bufferPy_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, // tp_flags"vtkPythonStdStreamCaptureHelper", // tp_doc0, // tp_traverse0, // tp_clear0, // tp_richcompare0, // tp_weaklistoffset0, // tp_iter0, // tp_iternextvtkPythonStdStreamCaptureHelperMethods, // tp_methodsvtkPythonStdStreamCaptureHelperMembers, // tp_members0, // tp_getset0, // tp_base0, // tp_dict0, // tp_descr_get0, // tp_descr_set0, // tp_dictoffset0, // tp_init0, // tp_allocvtkPythonStdStreamCaptureHelperNew, // tp_new0, // freefunc tp_free; /* Low-level free-memory routine */0, // inquiry tp_is_gc; /* For PyObject_IS_GC */0, // PyObject *tp_bases;0, // PyObject *tp_mro; /* method resolution order */0, // PyObject *tp_cache;0, // PyObject *tp_subclasses;0, // PyObject *tp_weaklist;0, // tp_del#if PY_VERSION_HEX >= 0x020600000, // tp_version_tag#endif#if PY_VERSION_HEX >= 0x030400000, // tp_finalize#endif};static PyObject* vtkWrite(PyObject* self, PyObject* args){if (!self || !PyObject_TypeCheck(self, &vtkPythonStdStreamCaptureHelperType)){return 0;}vtkPythonStdStreamCaptureHelper* wrapper =reinterpret_cast<vtkPythonStdStreamCaptureHelper*>(self);char* string;// const_cast since older versions of python are not const correct.if (wrapper && PyArg_ParseTuple(args, "s", &string)){wrapper->Write(string);}return Py_BuildValue("");}static PyObject* vtkRead(PyObject* self, PyObject* args){(void)args;if (!self || !PyObject_TypeCheck(self, &vtkPythonStdStreamCaptureHelperType)){return 0;}vtkPythonStdStreamCaptureHelper* wrapper =reinterpret_cast<vtkPythonStdStreamCaptureHelper*>(self);vtkStdString ret;if (wrapper){ret = wrapper->Read();}return Py_BuildValue("s", ret.c_str());}static PyObject* vtkFlush(PyObject* self, PyObject* args){(void)args;if (!self || !PyObject_TypeCheck(self, &vtkPythonStdStreamCaptureHelperType)){return 0;}vtkPythonStdStreamCaptureHelper* wrapper =reinterpret_cast<vtkPythonStdStreamCaptureHelper*>(self);if (wrapper){wrapper->Flush();}return Py_BuildValue("");}static PyObject* vtkClose(PyObject* self, PyObject* args){(void)args;if (!self || !PyObject_TypeCheck(self, &vtkPythonStdStreamCaptureHelperType)){return 0;}vtkPythonStdStreamCaptureHelper* wrapper =reinterpret_cast<vtkPythonStdStreamCaptureHelper*>(self);if (wrapper){wrapper->Close();}return Py_BuildValue("");}static vtkPythonStdStreamCaptureHelper* NewPythonStdStreamCaptureHelper(bool for_stderr = false){vtkPythonScopeGilEnsurer gilEnsurer;if (PyType_Ready(&vtkPythonStdStreamCaptureHelperType) < 0){return 0;}vtkPythonStdStreamCaptureHelper* wrapper =PyObject_New(vtkPythonStdStreamCaptureHelper, &vtkPythonStdStreamCaptureHelperType);if (wrapper){wrapper->DumpToError = for_stderr;}return wrapper;}#endif// VTK-HeaderTest-Exclude: vtkPythonStdStreamCaptureHelper.h
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。