Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework
v31r0 (aeb156f0)
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Modules
Pages
CallbackStreamBuf.cpp
Go to the documentation of this file.
1
// ============================================================================
2
#include "
GaudiPython/CallbackStreamBuf.h
"
// this one first, so Python.h is first
3
// ============================================================================
4
#include "
GaudiKernel/Bootstrap.h
"
5
// ============================================================================
6
#include <algorithm>
7
// ============================================================================
8
9
// ============================================================================
11
// ============================================================================
12
int
GaudiPython::call_python_method
( PyObject*
self
,
const
char
* method,
char
* buf ) {
13
if
( !
self
|| !method ) {
return
1; }
14
PyObject* r = PyObject_CallMethod(
self
, const_cast<char*>( method ), const_cast<char*>(
"s"
), buf );
15
if
( !r ) {
16
std::string
err(
"Unsuccessful call to bound Python method"
);
17
err += method;
18
PyErr_SetString( PyExc_TypeError, err.
c_str
() );
19
PyErr_Print();
20
return
1;
21
}
22
Py_DECREF( r );
23
return
0;
24
}
25
26
// ============================================================================
28
// ============================================================================
29
GaudiPython::CallbackStreamBuf::CallbackStreamBuf
( PyObject*
self
) : m_self( self ) {}
30
31
// ============================================================================
33
// ============================================================================
34
int
GaudiPython::CallbackStreamBuf::sync
() {
35
size_t
length;
36
char
* x;
37
for
( length = 0, x =
pbase
(); x <
epptr
(); ++x, ++length )
38
;
39
// getting in a null terminated buffer the characters
40
memcpy(
m_callbackBuff
.
data
(),
pbase
(),
std::min
( length,
m_callbackBuff
.
size
() ) );
41
m_callbackBuff
[
std::min
( length,
m_callbackBuff
.
size
() )] =
'\0'
;
42
// calling the python method
43
GaudiPython::call_python_method
(
m_self
.
get
(),
"_sync"
,
m_callbackBuff
.
data
() );
44
// reseting in/out buffer pointers
45
setp
(
pbase
(),
pbase
() );
46
setg
(
eback
(),
eback
(),
eback
() );
47
return
0;
48
}
GaudiPython::CallbackStreamBuf::sync
int sync() override
reimplementation of stringbuf::sync()
Definition:
CallbackStreamBuf.cpp:34
Bootstrap.h
GaudiPython::CallbackStreamBuf::m_self
PyObject_t m_self
Definition:
CallbackStreamBuf.h:30
GaudiPython::CallbackStreamBuf::PyObject_t::get
PyObject * get()
Definition:
CallbackStreamBuf.h:28
GaudiPython::CallbackStreamBuf::m_callbackBuff
std::array< char, 512 > m_callbackBuff
Definition:
CallbackStreamBuf.h:31
std::string
STL class.
std::min
T min(T...args)
std::array::data
T data(T...args)
std::array::size
T size(T...args)
std::stringbuf::pbase
T pbase(T...args)
std::string::c_str
T c_str(T...args)
GaudiPython::CallbackStreamBuf::CallbackStreamBuf
CallbackStreamBuf(PyObject *self)
CallbackStreamBuf constructor.
Definition:
CallbackStreamBuf.cpp:29
std::stringbuf::setg
T setg(T...args)
std::stringbuf::eback
T eback(T...args)
std::stringbuf::setp
T setp(T...args)
GaudiPython::call_python_method
GAUDI_API StatusCode call_python_method(PyObject *self, const char *method)
call the python method
Definition:
Algorithm.cpp:28
CallbackStreamBuf.h
GaudiPython
src
Lib
CallbackStreamBuf.cpp
Generated on Mon Feb 11 2019 17:48:18 for The Gaudi Framework by
1.8.11