| The Gaudi Framework v30r0 (c919700c)

- 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