// @(#)root/pyroot:$Id$
// Author: Wim Lavrijsen   Aug 2013

#ifndef ROOT_TPyArg
#define ROOT_TPyArg

//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// TPyArg                                                                   //
//                                                                          //
// Morphing argument type from evaluating python expressions.               //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////


// ROOT
#ifndef ROOT_Rtypes
#include "Rtypes.h"
#endif

// Python
struct _object;
typedef _object PyObject;

// Standard
#include <vector>


class TPyArg {
public:
// converting constructors
   TPyArg( PyObject* );
   TPyArg( Int_t );
   TPyArg( Long_t );
   TPyArg( Double_t );
   TPyArg( const char* );

   TPyArg( const TPyArg& );
   TPyArg& operator=( const TPyArg& );
   virtual ~TPyArg();

// "extractor"
   operator PyObject*() const;

// constructor and generic dispatch
   static void CallConstructor( PyObject*& pyself, PyObject* pyclass, const std::vector<TPyArg>& args );
   static void CallConstructor( PyObject*& pyself, PyObject* pyclass );   // default ctor
   static PyObject* CallMethod( PyObject* pymeth, const std::vector<TPyArg>& args );

   ClassDef(TPyArg,1)   //Python morphing argument type

private:
   mutable PyObject* fPyObject;        //! converted C++ value as python object
};

#endif
 TPyArg.h:1
 TPyArg.h:2
 TPyArg.h:3
 TPyArg.h:4
 TPyArg.h:5
 TPyArg.h:6
 TPyArg.h:7
 TPyArg.h:8
 TPyArg.h:9
 TPyArg.h:10
 TPyArg.h:11
 TPyArg.h:12
 TPyArg.h:13
 TPyArg.h:14
 TPyArg.h:15
 TPyArg.h:16
 TPyArg.h:17
 TPyArg.h:18
 TPyArg.h:19
 TPyArg.h:20
 TPyArg.h:21
 TPyArg.h:22
 TPyArg.h:23
 TPyArg.h:24
 TPyArg.h:25
 TPyArg.h:26
 TPyArg.h:27
 TPyArg.h:28
 TPyArg.h:29
 TPyArg.h:30
 TPyArg.h:31
 TPyArg.h:32
 TPyArg.h:33
 TPyArg.h:34
 TPyArg.h:35
 TPyArg.h:36
 TPyArg.h:37
 TPyArg.h:38
 TPyArg.h:39
 TPyArg.h:40
 TPyArg.h:41
 TPyArg.h:42
 TPyArg.h:43
 TPyArg.h:44
 TPyArg.h:45
 TPyArg.h:46
 TPyArg.h:47
 TPyArg.h:48
 TPyArg.h:49
 TPyArg.h:50
 TPyArg.h:51
 TPyArg.h:52
 TPyArg.h:53
 TPyArg.h:54
 TPyArg.h:55
 TPyArg.h:56