Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

InterfaceMakerPythonSimple Class Reference

An InterfaceMaker for generating simple Python function wrappers around C++ code. More...

#include <interfaceMakerPythonSimple.h>

Inheritance diagram for InterfaceMakerPythonSimple:

InterfaceMakerPython InterfaceMaker List of all members.

Public Member Functions

 InterfaceMakerPythonSimple (InterrogateModuleDef *def)
virtual ~InterfaceMakerPythonSimple ()
virtual void write_prototypes (ostream &out)
 Generates the list of function prototypes corresponding to the functions that will be output in write_functions().

virtual void write_functions (ostream &out)
 Generates the list of functions that are appropriate for this interface.

virtual void write_module (ostream &out, InterrogateModuleDef *def)
 Generates whatever additional code is required to support a module file.

virtual bool synthesize_this_parameter ()
 This method should be overridden and redefined to return true for interfaces that require the implicit "this" parameter, if present, to be passed as the first parameter to any wrapper functions.

virtual void write_includes (ostream &out)
 Generates the list of #include ...

virtual void generate_wrappers ()
 Walks through the set of functions in the database and generates wrappers for each function, storing these in the database.

virtual ParameterRemapremap_parameter (CPPType *struct_type, CPPType *param_type)
 Allocates a new ParameterRemap object suitable to the indicated parameter type.

virtual bool separate_overloading ()
 This method should be overridden and redefined to return true for interfaces that require overloaded instances of a function to be defined as separate functions (each with its own hashed name), or false for interfaces that can support overloading natively, and thus only require one wrapper function per each overloaded input function.

void get_function_remaps (vector< FunctionRemap * > &remaps)
 Fills up the indicated vector with all of the FunctionRemap pointers created by this InterfaceMaker.


Static Public Member Functions

ostream & indent (ostream &out, int indent_level)

Protected Types

typedef vector< Function * > Functions
typedef map< TypeIndex, Object * > Objects
typedef map< string, FunctionRemap * > WrappersByHash

Protected Member Functions

virtual string get_wrapper_prefix ()
 Returns the prefix string used to generate wrapper function names.

virtual string get_unique_prefix ()
 Returns the prefix string used to generate unique symbolic names, which are not necessarily C-callable function names.

virtual void record_function_wrapper (InterrogateFunction &ifunc, FunctionWrapperIndex wrapper_index)
 Associates the function wrapper with its function in the appropriate structures in the database.

void test_assert (ostream &out, int indent_level) const
 Outputs code to check to see if an assertion has failed while the C++ code was executing, and report this failure back to Python.

virtual FunctionRemapmake_function_remap (const InterrogateType &itype, const InterrogateFunction &ifunc, CPPInstance *cppfunc, int num_default_parameters)
 Creates a FunctionRemap object corresponding to the particular function wrapper.

virtual string get_wrapper_name (const InterrogateType &itype, const InterrogateFunction &ifunc, FunctionIndex func_index)
 Returns the function name that will be used to wrap the indicated function.

Function * record_function (const InterrogateType &itype, FunctionIndex func_index)
 Records the indicated function, along with all of its FunctionRemap flavors and FunctionWriter helpers, for future output.

Object * record_object (TypeIndex type_index)
 Records the indicated type, which may be a struct type, along with all of its associated methods, if any.

void hash_function_signature (FunctionRemap *remap)
 Generates a unique string that corresponds to the function signature for the indicated FunctionRemap object, and stores the generated string in the _hash member of the FunctionRemap.

string manage_return_value (ostream &out, int indent_level, FunctionRemap *remap, const string &return_expr) const
 Does any additional processing that we might want to do on the return value for the function, just before we return it.

void output_ref (ostream &out, int indent_level, FunctionRemap *remap, const string &varname) const
 Outputs the code to increment the reference count for the indicated variable name.

void write_spam_message (ostream &out, FunctionRemap *remap) const
 Generates a string to output a spammy message to notify indicating we have just called this function.


Protected Attributes

Functions _functions
Objects _objects
WrappersByHash _wrappers_by_hash
InterrogateModuleDef_def
FunctionWriters _function_writers

Private Member Functions

void write_prototype_for (ostream &out, Function *func)
 Writes the prototype for the indicated function.

void write_function_for (ostream &out, Function *func)
 Writes the definition for a function that will call the indicated C++ function or method.

void write_function_instance (ostream &out, Function *func, FunctionRemap *remap)
 Writes out the particular function that handles a single instance of an overloaded function.

void pack_return_value (ostream &out, int indent_level, FunctionRemap *remap, string return_expr)
 Outputs a command to pack the indicated expression, of the return_type type, as a Python return value.


Detailed Description

An InterfaceMaker for generating simple Python function wrappers around C++ code.

This allows the C++ code to be called by Python, but not necessarily in a user-friendly or object-oriented way.

You probably want to use InterfaceMakerPythonObj for a full object-oriented solution. This InterfaceMaker is primarily useful as a stopgap for our old Python-based FFI system.

Definition at line 55 of file interfaceMakerPythonSimple.h.


Member Typedef Documentation

typedef vector<Function *> InterfaceMaker::Functions [protected, inherited]
 

Definition at line 103 of file interfaceMaker.h.

typedef map<TypeIndex, Object *> InterfaceMaker::Objects [protected, inherited]
 

Definition at line 118 of file interfaceMaker.h.

typedef map<string, FunctionRemap *> InterfaceMaker::WrappersByHash [protected, inherited]
 

Definition at line 121 of file interfaceMaker.h.


Constructor & Destructor Documentation

InterfaceMakerPythonSimple::InterfaceMakerPythonSimple InterrogateModuleDef def  ) 
 

Definition at line 42 of file interfaceMakerPythonSimple.cxx.

InterfaceMakerPythonSimple::~InterfaceMakerPythonSimple  )  [virtual]
 

Definition at line 55 of file interfaceMakerPythonSimple.cxx.

References InterfaceMaker::_functions, write_prototype_for(), and InterfaceMaker::write_prototypes().


Member Function Documentation

void InterfaceMaker::generate_wrappers  )  [virtual, inherited]
 

Walks through the set of functions in the database and generates wrappers for each function, storing these in the database.

No actual code should be output yet; this just updates the database with the wrapper information.

Definition at line 157 of file interfaceMaker.cxx.

References FunctionIndex.

void InterfaceMaker::get_function_remaps vector< FunctionRemap * > &  remaps  )  [inherited]
 

Fills up the indicated vector with all of the FunctionRemap pointers created by this InterfaceMaker.

It is the user's responsibility to empty the vector before calling this function; the new pointers will simply be added to the end.

Definition at line 408 of file interfaceMaker.cxx.

string InterfaceMakerPythonSimple::get_unique_prefix  )  [protected, virtual]
 

Returns the prefix string used to generate unique symbolic names, which are not necessarily C-callable function names.

Reimplemented from InterfaceMaker.

Definition at line 193 of file interfaceMakerPythonSimple.cxx.

string InterfaceMaker::get_wrapper_name const InterrogateType itype,
const InterrogateFunction ifunc,
FunctionIndex  func_index
[protected, virtual, inherited]
 

Returns the function name that will be used to wrap the indicated function.

This is the name for the overall wrapper function, including all of the overloaded instances. Interfaces that must define a different wrapper for each FunctionRemap object (i.e. for each instance of an overloaded function) need not define a name here.

Definition at line 490 of file interfaceMaker.cxx.

References InterfaceMaker::Function::_has_this, FunctionRemap::_has_this, InterfaceMaker::Function::_remaps, FunctionWrapperIndex, FunctionRemap::make_wrapper_entry(), NULL, InterfaceMaker::record_function_wrapper(), and InterrogateDatabase::update_function().

string InterfaceMakerPythonSimple::get_wrapper_prefix  )  [protected, virtual]
 

Returns the prefix string used to generate wrapper function names.

Reimplemented from InterfaceMaker.

Definition at line 176 of file interfaceMakerPythonSimple.cxx.

References InterfaceMaker::Function::_remaps, FunctionRemap::_wrapper_name, and output_function_names.

void InterfaceMaker::hash_function_signature FunctionRemap remap  )  [protected, inherited]
 

Generates a unique string that corresponds to the function signature for the indicated FunctionRemap object, and stores the generated string in the _hash member of the FunctionRemap.

Definition at line 824 of file interfaceMaker.cxx.

Referenced by InterfaceMaker::synthesize_this_parameter().

ostream & InterfaceMaker::indent ostream &  out,
int  indent_level
[static, inherited]
 

Definition at line 428 of file interfaceMaker.cxx.

Referenced by FunctionRemap::get_parameter_name(), ParameterRemapBasicStringToString::pass_parameter(), InterfaceMakerPythonObj::write_function_for(), and InterfaceMakerPython::write_includes().

FunctionRemap * InterfaceMaker::make_function_remap const InterrogateType itype,
const InterrogateFunction ifunc,
CPPInstance cppfunc,
int  num_default_parameters
[protected, virtual, inherited]
 

Creates a FunctionRemap object corresponding to the particular function wrapper.

Definition at line 446 of file interfaceMaker.cxx.

References InterfaceMaker::_functions, InterrogateFunction::Instances, and NULL.

string InterfaceMaker::manage_return_value ostream &  out,
int  indent_level,
FunctionRemap remap,
const string &  return_expr
const [protected, inherited]
 

Does any additional processing that we might want to do on the return value for the function, just before we return it.

Returns the string representing the new return value after processing.

Definition at line 740 of file interfaceMaker.cxx.

References InterfaceMaker::_wrappers_by_hash, and nout.

void InterfaceMaker::output_ref ostream &  out,
int  indent_level,
FunctionRemap remap,
const string &  varname
const [protected, inherited]
 

Outputs the code to increment the reference count for the indicated variable name.

Definition at line 786 of file interfaceMaker.cxx.

Referenced by InterfaceMaker::record_function_wrapper().

void InterfaceMakerPythonSimple::pack_return_value ostream &  out,
int  indent_level,
FunctionRemap remap,
string  return_expr
[private]
 

Outputs a command to pack the indicated expression, of the return_type type, as a Python return value.

Definition at line 439 of file interfaceMakerPythonSimple.cxx.

InterfaceMaker::Function * InterfaceMaker::record_function const InterrogateType itype,
FunctionIndex  func_index
[protected, inherited]
 

Records the indicated function, along with all of its FunctionRemap flavors and FunctionWriter helpers, for future output.

Returns the new Function pointer.

Definition at line 546 of file interfaceMaker.cxx.

References InterfaceMaker::_objects.

Referenced by InterfaceMaker::~InterfaceMaker().

void InterfaceMakerPythonSimple::record_function_wrapper InterrogateFunction ifunc,
FunctionWrapperIndex  wrapper_index
[protected, virtual]
 

Associates the function wrapper with its function in the appropriate structures in the database.

Reimplemented from InterfaceMaker.

Definition at line 208 of file interfaceMakerPythonSimple.cxx.

InterfaceMaker::Object * InterfaceMaker::record_object TypeIndex  type_index  )  [protected, inherited]
 

Records the indicated type, which may be a struct type, along with all of its associated methods, if any.

Definition at line 644 of file interfaceMaker.cxx.

Referenced by InterfaceMaker::~InterfaceMaker().

ParameterRemap * InterfaceMaker::remap_parameter CPPType struct_type,
CPPType param_type
[virtual, inherited]
 

Allocates a new ParameterRemap object suitable to the indicated parameter type.

If struct_type is non-NULL, it is the type of the enclosing class for the function (method) in question.

The return value is a newly-allocated ParameterRemap object, if the parameter type is acceptable, or NULL if the parameter type cannot be handled.

Definition at line 287 of file interfaceMaker.cxx.

bool InterfaceMaker::separate_overloading  )  [virtual, inherited]
 

This method should be overridden and redefined to return true for interfaces that require overloaded instances of a function to be defined as separate functions (each with its own hashed name), or false for interfaces that can support overloading natively, and thus only require one wrapper function per each overloaded input function.

Definition at line 387 of file interfaceMaker.cxx.

Referenced by InterfaceMaker::synthesize_this_parameter().

bool InterfaceMakerPythonSimple::synthesize_this_parameter  )  [virtual]
 

This method should be overridden and redefined to return true for interfaces that require the implicit "this" parameter, if present, to be passed as the first parameter to any wrapper functions.

Reimplemented from InterfaceMaker.

Definition at line 161 of file interfaceMakerPythonSimple.cxx.

References InterrogateFunction::_python_wrappers.

void InterfaceMakerPython::test_assert ostream &  out,
int  indent_level
const [protected, inherited]
 

Outputs code to check to see if an assertion has failed while the C++ code was executing, and report this failure back to Python.

Definition at line 71 of file interfaceMakerPython.cxx.

void InterfaceMakerPythonSimple::write_function_for ostream &  out,
InterfaceMaker::Function func
[private]
 

Writes the definition for a function that will call the indicated C++ function or method.

Definition at line 250 of file interfaceMakerPythonSimple.cxx.

Referenced by write_prototypes().

void InterfaceMakerPythonSimple::write_function_instance ostream &  out,
InterfaceMaker::Function func,
FunctionRemap remap
[private]
 

Writes out the particular function that handles a single instance of an overloaded function.

Definition at line 270 of file interfaceMakerPythonSimple.cxx.

void InterfaceMakerPythonSimple::write_functions ostream &  out  )  [virtual]
 

Generates the list of functions that are appropriate for this interface.

This function is called *before* write_prototypes(), above.

Reimplemented from InterfaceMaker.

Definition at line 95 of file interfaceMakerPythonSimple.cxx.

References InterfaceMaker::_functions, FunctionRemap::_unique_name, FunctionRemap::_wrapper_name, InterrogateModuleDef::library_name, and InterfaceMaker::write_module().

void InterfaceMakerPython::write_includes ostream &  out  )  [virtual, inherited]
 

Generates the list of #include ...

whatever that's required by this particular interface to the indicated output stream.

Reimplemented from InterfaceMaker.

Definition at line 52 of file interfaceMakerPython.cxx.

References InterfaceMaker::indent().

void InterfaceMakerPythonSimple::write_module ostream &  out,
InterrogateModuleDef def
[virtual]
 

Generates whatever additional code is required to support a module file.

Reimplemented from InterfaceMaker.

Definition at line 116 of file interfaceMakerPythonSimple.cxx.

void InterfaceMakerPythonSimple::write_prototype_for ostream &  out,
InterfaceMaker::Function func
[private]
 

Writes the prototype for the indicated function.

Definition at line 222 of file interfaceMakerPythonSimple.cxx.

References output_function_names.

Referenced by ~InterfaceMakerPythonSimple().

void InterfaceMakerPythonSimple::write_prototypes ostream &  out  )  [virtual]
 

Generates the list of function prototypes corresponding to the functions that will be output in write_functions().

Reimplemented from InterfaceMaker.

Definition at line 71 of file interfaceMakerPythonSimple.cxx.

References InterfaceMaker::_functions, write_function_for(), and InterfaceMaker::write_functions().

void InterfaceMaker::write_spam_message ostream &  out,
FunctionRemap remap
const [protected, inherited]
 

Generates a string to output a spammy message to notify indicating we have just called this function.

Definition at line 896 of file interfaceMaker.cxx.


Member Data Documentation

InterrogateModuleDef* InterfaceMaker::_def [protected, inherited]
 

Definition at line 158 of file interfaceMaker.h.

Referenced by InterfaceMaker::synthesize_this_parameter().

FunctionWriters InterfaceMaker::_function_writers [protected, inherited]
 

Definition at line 160 of file interfaceMaker.h.

Functions InterfaceMaker::_functions [protected, inherited]
 

Definition at line 104 of file interfaceMaker.h.

Referenced by InterfaceMaker::make_function_remap(), write_functions(), write_prototypes(), InterfaceMakerPythonObj::write_prototypes(), InterfaceMakerC::write_prototypes(), InterfaceMakerC::~InterfaceMakerC(), InterfaceMakerPythonObj::~InterfaceMakerPythonObj(), and ~InterfaceMakerPythonSimple().

Objects InterfaceMaker::_objects [protected, inherited]
 

Definition at line 119 of file interfaceMaker.h.

Referenced by InterfaceMaker::get_unique_prefix(), InterfaceMaker::record_function(), InterfaceMakerPythonObj::write_functions(), and InterfaceMakerPythonObj::write_prototypes().

WrappersByHash InterfaceMaker::_wrappers_by_hash [protected, inherited]
 

Definition at line 122 of file interfaceMaker.h.

Referenced by InterfaceMaker::manage_return_value().


The documentation for this class was generated from the following files:
Generated on Thu May 1 22:13:35 2003 for DTool by doxygen1.3