Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
TMethodHolder.h
Go to the documentation of this file.
1 // @(#)root/pyroot:$Id$
2 // Author: Wim Lavrijsen, Apr 2004
3 
4 #ifndef PYROOT_TMETHODHOLDER_H
5 #define PYROOT_TMETHODHOLDER_H
6 
7 // Bindings
8 #include "PyCallable.h"
9 
10 // Standard
11 #include <string>
12 #include <vector>
13 
14 
15 namespace PyROOT {
16 
17  class TExecutor;
18  class TConverter;
19 
20  class TMethodHolder : public PyCallable {
21  public:
22  TMethodHolder( Cppyy::TCppScope_t scope, Cppyy::TCppMethod_t method );
23  TMethodHolder( const TMethodHolder& );
24  TMethodHolder& operator=( const TMethodHolder& );
25  virtual ~TMethodHolder();
26 
27  public:
28  virtual PyObject* GetSignature();
29  virtual PyObject* GetPrototype();
30  virtual Int_t GetPriority();
31 
32  virtual Int_t GetMaxArgs();
33  virtual PyObject* GetCoVarNames();
34  virtual PyObject* GetArgDefault( Int_t iarg );
35  virtual PyObject* GetScopeProxy();
36 
37  virtual PyCallable* Clone() { return new TMethodHolder( *this ); }
38 
39  public:
40  virtual PyObject* Call(
41  ObjectProxy*& self, PyObject* args, PyObject* kwds, TCallContext* ctxt = 0 );
42 
43  virtual Bool_t Initialize( TCallContext* ctxt = 0 );
44  virtual PyObject* PreProcessArgs( ObjectProxy*& self, PyObject* args, PyObject* kwds );
45  virtual Bool_t ConvertAndSetArgs( PyObject* args, TCallContext* ctxt = 0 );
46  virtual PyObject* Execute( void* self, ptrdiff_t offset, TCallContext* ctxt = 0 );
47 
48  protected:
49  Cppyy::TCppMethod_t GetMethod() { return fMethod; }
50  Cppyy::TCppScope_t GetScope() { return fScope; }
51  TExecutor* GetExecutor() { return fExecutor; }
52  std::string GetSignatureString();
53  std::string GetReturnTypeName();
54 
55  virtual Bool_t InitExecutor_( TExecutor*&, TCallContext* ctxt = 0 );
56 
57  private:
58  void Copy_( const TMethodHolder& );
59  void Destroy_() const;
60 
61  PyObject* CallFast( void*, ptrdiff_t, TCallContext* );
62  PyObject* CallSafe( void*, ptrdiff_t, TCallContext* );
63 
64  Bool_t InitConverters_();
65 
66  void SetPyError_( PyObject* msg );
67 
68  private:
69  // representation
70  Cppyy::TCppMethod_t fMethod;
71  Cppyy::TCppScope_t fScope;
72  TExecutor* fExecutor;
73 
74  // call dispatch buffers
75  std::vector< TConverter* > fConverters;
76 
77  // cached values
78  Int_t fArgsRequired;
79 
80  // admin
81  Bool_t fIsInitialized;
82  };
83 
84 } // namespace PyROOT
85 
86 #endif // !PYROOT_METHODHOLDER_H