The Gaudi Framework
v30r3 (a5ef0a68)
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
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
{
14
if
( !
self
|| !method ) {
15
return
1;
16
}
17
PyObject* r = PyObject_CallMethod(
self
, const_cast<char*>( method ), const_cast<char*>(
"s"
), buf );
18
if
( !r ) {
19
std::string
err(
"Unsuccessful call to bound Python method"
);
20
err += method;
21
PyErr_SetString( PyExc_TypeError, err.
c_str
() );
22
PyErr_Print();
23
return
1;
24
}
25
Py_DECREF( r );
26
return
0;
27
}
28
29
// ============================================================================
31
// ============================================================================
32
GaudiPython::CallbackStreamBuf::CallbackStreamBuf
( PyObject*
self
) : m_self( self ) {}
33
34
// ============================================================================
36
// ============================================================================
37
int
GaudiPython::CallbackStreamBuf::sync
()
38
{
39
size_t
length;
40
char
* x;
41
for
( length = 0, x =
pbase
(); x <
epptr
(); ++x, ++length )
42
;
43
// getting in a null terminated buffer the characters
44
memcpy(
m_callbackBuff
.
data
(),
pbase
(),
std::min
( length,
m_callbackBuff
.
size
() ) );
45
m_callbackBuff
[
std::min
( length,
m_callbackBuff
.
size
() )] =
'\0'
;
46
// calling the python method
47
GaudiPython::call_python_method
(
m_self
.
get
(),
"_sync"
,
m_callbackBuff
.
data
() );
48
// reseting in/out buffer pointers
49
setp
(
pbase
(),
pbase
() );
50
setg
(
eback
(),
eback
(),
eback
() );
51
return
0;
52
}
GaudiPython::CallbackStreamBuf::sync
int sync() override
reimplementation of stringbuf::sync()
Definition:
CallbackStreamBuf.cpp:37
Bootstrap.h
GaudiPython::CallbackStreamBuf::m_self
PyObject_t m_self
Definition:
CallbackStreamBuf.h:35
GaudiPython::CallbackStreamBuf::PyObject_t::get
PyObject * get()
Definition:
CallbackStreamBuf.h:33
GaudiPython::CallbackStreamBuf::m_callbackBuff
std::array< char, 512 > m_callbackBuff
Definition:
CallbackStreamBuf.h:36
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:32
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:29
CallbackStreamBuf.h
GaudiPython
src
Lib
CallbackStreamBuf.cpp
Generated on Wed Aug 1 2018 23:21:14 for The Gaudi Framework by
1.8.11