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 // ============================================================================
5 // ============================================================================
6 #include <algorithm>
7 // ============================================================================
8 
9 
10 // ============================================================================
12 // ============================================================================
14 ( PyObject* self, const char* method, char* buf )
15 {
16  if ( !self || !method ) { return 1 ; }
17  PyObject* r = PyObject_CallMethod(self, const_cast<char*>(method),
18  const_cast<char*>("s"), buf);
19  if ( !r ) {
20  std::string err("Unsuccessful call to bound Python method");
21  err += method;
22  PyErr_SetString( PyExc_TypeError , err.c_str() ) ;
23  PyErr_Print() ;
24  return 1 ;
25  }
26  Py_DECREF( r );
27  return 0 ;
28 }
29 
30 // ============================================================================
32 // ============================================================================
34  m_self(self)
35 { }
36 
37 // ============================================================================
39 // ============================================================================
41 {
42  size_t length;
43  char *x;
44  for ( length = 0, x = pbase(); x < epptr(); ++x , ++length ) ;
45  //getting in a null terminated buffer the characters
46  memcpy( m_callbackBuff.data(), pbase(), std::min(length, m_callbackBuff.size()) );
47  m_callbackBuff[ std::min(length, m_callbackBuff.size()) ] = '\0';
48  //calling the python method
50  //reseting in/out buffer pointers
51  setp( pbase() , pbase() );
52  setg( eback(), eback(), eback() );
53  return 0;
54 }
int sync() override
reimplementation of stringbuf::sync()
std::array< char, 512 > m_callbackBuff
STL class.
T min(T...args)
T data(T...args)
T size(T...args)
T pbase(T...args)
T c_str(T...args)
CallbackStreamBuf(PyObject *self)
CallbackStreamBuf constructor.
T setg(T...args)
T eback(T...args)
T setp(T...args)
GAUDI_API StatusCode call_python_method(PyObject *self, const char *method)
call the python method
Definition: Algorithm.cpp:29