Rosetta  2019.12
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Typedefs | Functions | Variables
binder Namespace Reference

Classes

class  Binder
 Bindings Generator - represent object that can generate binding info for function, class, enum or data variable. More...
 
class  ClassBinder
 
class  Config
 
struct  ConstructorBindingInfo
 
class  Context
 Context - root, hold bindings info for whole TranslationUnit. More...
 
class  EnumBinder
 
class  FunctionBinder
 
class  IncludeSet
 
class  map_binder
 
class  vector_binder
 

Typedefs

typedef std::shared_ptr< BinderBinderOP
 
typedef std::vector< BinderOPBinders
 

Functions

string template_specialization (clang::CXXRecordDecl const *C)
 
string class_name (CXXRecordDecl const *C)
 
string python_class_name (CXXRecordDecl const *C)
 
string class_qualified_name (CXXRecordDecl const *C)
 
vector< QualType > get_type_dependencies (CXXRecordDecl const *C)
 
bool is_inherited_from_enable_shared_from_this (CXXRecordDecl const *C)
 
bool is_field_assignable (FieldDecl const *f)
 
bool is_bindable (FieldDecl *f)
 check if generator can create binding More...
 
string bind_data_member (FieldDecl const *d, string const &class_qualified_name)
 
bool is_const_overload (CXXMethodDecl *mc)
 
bool is_std_function_bindable (CXXRecordDecl const *C)
 
bool is_bindable_raw (clang::CXXRecordDecl const *C)
 check if generator can create binding More...
 
bool is_bindable (clang::CXXRecordDecl const *C)
 check if generator can create binding More...
 
bool is_binding_requested (clang::CXXRecordDecl const *C, Config const &config)
 check if user requested binding for the given declaration More...
 
bool is_skipping_requested (clang::CXXRecordDecl const *C, Config const &config)
 check if user requested skipping for the given declaration More...
 
void add_relevant_includes (clang::CXXRecordDecl const *C, IncludeSet &includes, int level)
 
bool base_default_default_constructor_available (CXXRecordDecl const *C)
 DEPRECATED Check if all bases have public default constructors. More...
 
string binding_public_data_members (CXXRecordDecl const *C)
 
string callback_structure_name (CXXRecordDecl const *C)
 
bool is_callback_structure_needed (CXXRecordDecl const *C)
 
bool is_callback_structure_constructible (CXXRecordDecl const *C)
 
string bind_member_functions_for_call_back (CXXRecordDecl const *C, string const &class_name, set< string > &binded, int &ret_id, std::vector< clang::FunctionDecl const * > &prefix_includes)
 
string binding_public_member_functions (CXXRecordDecl const *C, bool callback_structure, bool callback_structure_constructible, Context &context)
 
string binding_template_bases (CXXRecordDecl const *C, bool callback_structure, bool callback_structure_constructible, Context &context)
 
string bind_forward_declaration (CXXRecordDecl const *C, Context &context)
 Create forward-binding for given class which consist of only class type without any member, function or constructors. More...
 
string bind_constructor (ConstructorBindingInfo const &CBI, uint args_to_bind, bool request_bindings_f)
 
string bind_default_constructor (ConstructorBindingInfo const &CBI)
 Generate code for binding default constructor. More...
 
string bind_copy_constructor (ConstructorBindingInfo const &CBI)
 
string bind_constructor (ConstructorBindingInfo const &CBI)
 
std::string class_name (clang::CXXRecordDecl const *C)
 
std::string class_qualified_name (clang::CXXRecordDecl const *C)
 
std::vector< clang::QualType > get_type_dependencies (clang::CXXRecordDecl const *C)
 
std::vector< clang::NamedDecl
const * > 
get_decl_dependencies (clang::CXXRecordDecl const *C)
 
std::string bind_forward_declaration (clang::CXXRecordDecl const *C, Context &)
 Create forward-binding for given class which consist of only class type without any member, function or constructors. More...
 
std::pair< string, string > split_in_two (string const &s, string const &error_string)
 Split string in two by ether space or tab character. More...
 
llvm::raw_ostream & operator<< (llvm::raw_ostream &os, Binder const &b)
 
string generate_include_directives (IncludeSet const &include_set)
 
string file_name_prefix_for_binder (BinderOP &b)
 Generate file name where binding for given generator should be stored. More...
 
void add_relevant_includes (clang::EnumDecl const *E, IncludeSet &includes, int level)
 extract include needed for this generator and add it to includes vector More...
 
bool is_bindable (EnumDecl const *E)
 check if generator can create binding More...
 
std::string bind_enum (std::string const &module, EnumDecl const *E)
 
bool is_bindable (clang::EnumDecl const *E)
 check if generator can create binding More...
 
std::string bind_enum (std::string const &module, clang::EnumDecl const *E)
 
string function_arguments (clang::FunctionDecl const *record)
 
pair< string, string > function_arguments_for_lambda (clang::FunctionDecl const *record, uint n)
 
tuple< string, string, string > function_arguments_for_py_overload (clang::FunctionDecl const *record)
 
string template_specialization (FunctionDecl const *F)
 
string python_function_name (FunctionDecl const *F)
 
string function_pointer_type (FunctionDecl const *F)
 
string function_qualified_name (FunctionDecl const *F, bool omit_return_type)
 
vector< QualType > get_type_dependencies (FunctionDecl const *F)
 generate human redable C++ type signature for given function More...
 
bool is_binding_requested (FunctionDecl const *F, Config const &config)
 check if user requested binding for the given declaration More...
 
bool is_skipping_requested (FunctionDecl const *F, Config const &config)
 check if user requested skipping for the given declaration More...
 
string bind_function (FunctionDecl const *F, uint args_to_bind, bool request_bindings_f, Context &context, CXXRecordDecl const *parent, bool always_use_lambda)
 
string bind_function (string const &module, FunctionDecl const *F, Context &context, CXXRecordDecl const *parent, bool always_use_lambda)
 
void add_relevant_includes (FunctionDecl const *F, IncludeSet &includes, int level)
 extract include needed for this generator and add it to includes vector More...
 
bool is_bindable (FunctionDecl const *F)
 check if generator can create binding More...
 
bool is_overloadable (CXXMethodDecl const *M)
 check if methods could be overload in Python More...
 
std::string python_function_name (clang::FunctionDecl const *F)
 
std::string function_pointer_type (clang::FunctionDecl const *record)
 
std::string function_qualified_name (clang::FunctionDecl const *F, bool omit_return_type=false)
 
bool is_binding_requested (clang::FunctionDecl const *F, Config const &config)
 check if user requested binding for the given declaration More...
 
bool is_skipping_requested (clang::FunctionDecl const *F, Config const &config)
 check if user requested skipping for the given declaration More...
 
std::string bind_function (std::string const &module, clang::FunctionDecl const *F, Context &, clang::CXXRecordDecl const *parent=nullptr, bool always_use_lambda=false)
 
void add_relevant_includes (clang::FunctionDecl const *F, IncludeSet &includes, int level)
 extract include needed for this generator and add it to includes vector More...
 
bool is_bindable (clang::FunctionDecl const *F)
 check if generator can create binding More...
 
bool is_overloadable (clang::CXXMethodDecl const *M)
 check if methods could be overload in Python More...
 
bool is_binding_requested (clang::QualType const &qt, Config const &config)
 check if user requested binding for the given QualType More...
 
bool is_skipping_requested (QualType const &qt, Config const &config)
 
string relevant_include (NamedDecl const *decl)
 
void add_relevant_include_for_decl (NamedDecl const *decl, IncludeSet &includes)
 
void add_relevant_includes (QualType const &qt, IncludeSet &includes, int level)
 extract include needed for this generator and add it to includes vector More...
 
bool is_bindable (QualType const &qt)
 
void request_bindings (clang::QualType const &qt, Context &context)
 extract type info from QualType if any and bind relative type More...
 
string standard_name (string const &type)
 
string simplify_std_class_name (string const &type)
 Attempt to simplify std:: name by removing unneded template arguments. Function assume that there is no 'std::' namespaces prefix at the beginning of the argument string. More...
 
bool is_python_builtin (NamedDecl const *C)
 check if given class/struct is builtin in Python and therefor should not be binded More...
 
bool is_banned_symbol (clang::NamedDecl const *D)
 
bool is_skipping_requested (clang::QualType const &qt, Config const &config)
 check if user requested skipping for the given QualType More...
 
std::string relevant_include (clang::NamedDecl const *decl)
 
void add_relevant_include_for_decl (clang::NamedDecl const *decl, IncludeSet &includes)
 
void add_relevant_includes (clang::QualType const &qt, IncludeSet &includes, int level)
 extract include needed for this generator and add it to includes vector More...
 
bool is_bindable (clang::QualType const &qt)
 
bool is_python_builtin (clang::NamedDecl const *C)
 check if given class/struct is builtin in Python and therefor should not be binded More...
 
vector< string > split (string const &buffer, string const &separator)
 Split string using given separator. More...
 
void replace (string &r, string const &from, string const &to)
 Replace all occurrences of string. More...
 
string replace_ (string const &s, string const &from, string const &to)
 Replace all occurrences of string and return result as new string. More...
 
bool begins_with (std::string const &source, std::string const &prefix)
 check if string begins with given prefix More...
 
bool ends_with (std::string const &source, std::string const &prefix)
 check if string ends with given prefix More...
 
string indent (std::string const &code, std::string const &indentation)
 indent given code More...
 
void update_source_file (std::string const &prefix, std::string const &file_name, std::string const &code)
 Try to read exisitng file and if content does not match to code - write a new version. Also create nested dirs starting from prefix if nessesary. More...
 
string namespace_from_named_decl (NamedDecl const *decl)
 
string typename_from_type_decl (TypeDecl *decl)
 generate unique string representation of type represented by given declaration More...
 
string base_namespace (string const &ns)
 Calculate base (upper) namespace for given one: core::pose::motif –> core::pose. More...
 
string last_namespace (string const &ns)
 Calculate last namespace for given one: core::pose::motif –> motif. More...
 
void fix_boolean_types (std::string &type)
 replace all _Bool types with bool More...
 
string expresion_to_string (clang::Expr *e)
 Generate string representation of given expression. More...
 
string template_argument_to_string (clang::TemplateArgument const &)
 Generate string representation of given TemplateArgument. More...
 
string line_number (NamedDecl const *decl)
 
string mangle_type_name (string const &name, bool mark_template)
 
string generate_comment_for_declaration (clang::NamedDecl const *decl)
 
string get_text (comments::Comment const *C, SourceManager const &SM, SourceLocation previous)
 
std::string generate_documentation_string_for_declaration (clang::Decl const *decl)
 
std::string namespace_from_named_decl (clang::NamedDecl const *decl)
 calculate namespace path from given NamedDecl, like: std, core::pose More...
 
std::string typename_from_type_decl (clang::TypeDecl *decl)
 
std::string line_number (clang::NamedDecl const *decl)
 calcualte line in source file for NamedDecl More...
 

Variables

const char * call_back_function_body_template
 
char const * constructor_template = "\tcl.def( pybind11::init( []({0}){{ return new {2}({1}); }} ), \"doc\");"
 
char const * constructor_with_trampoline_template = "\tcl.def( pybind11::init( []({0}){{ return new {2}({1}); }}, []({0}){{ return new {3}({1}); }} ), \"doc\");"
 
const char * main_module_header
 
const char * module_header
 
const char * module_function_suffix = "(std::function< pybind11::module &(std::string const &namespace_) > &M)"
 
static std::map< string,
string > const 
cpp_python_operator_map
 

Typedef Documentation

typedef std::shared_ptr< Binder > binder::BinderOP

Function Documentation

void binder::add_relevant_include_for_decl ( clang::NamedDecl const *  decl,
IncludeSet &  includes 
)
void binder::add_relevant_include_for_decl ( NamedDecl const *  decl,
IncludeSet &  includes 
)
void binder::add_relevant_includes ( clang::EnumDecl const *  E,
IncludeSet &  includes,
int  level 
)

extract include needed for this generator and add it to includes vector

References binder::IncludeSet::add_decl(), and add_relevant_include_for_decl().

void binder::add_relevant_includes ( clang::QualType const &  qt,
IncludeSet &  includes,
int  level 
)

extract include needed for this generator and add it to includes vector

void binder::add_relevant_includes ( clang::FunctionDecl const *  F,
IncludeSet &  includes,
int  level 
)

extract include needed for this generator and add it to includes vector

void binder::add_relevant_includes ( QualType const &  qt,
IncludeSet &  includes,
int  level 
)

extract include needed for this generator and add it to includes vector

References test.T009_Exceptions::e, and basic::options::OptionKeys::out::level.

void binder::add_relevant_includes ( clang::CXXRecordDecl const *  C,
IncludeSet &  includes,
int  level 
)
void binder::add_relevant_includes ( FunctionDecl const *  F,
IncludeSet &  includes,
int  level 
)

extract include needed for this generator and add it to includes vector

References binder::IncludeSet::add_decl(), add_relevant_include_for_decl(), add_relevant_includes(), get_type_dependencies(), and basic::options::OptionKeys::in::file::t.

bool binder::base_default_default_constructor_available ( CXXRecordDecl const *  C)

DEPRECATED Check if all bases have public default constructors.

References basic::options::OptionKeys::score::fiber_diffraction::b, and basic::options::OptionKeys::in::file::t.

Referenced by binder::ClassBinder::bind().

std::string binder::base_namespace ( string const &  ns)

Calculate base (upper) namespace for given one: core::pose::motif –> core::pose.

References demo.D060_Folding::f.

Referenced by binder::Context::create_all_nested_namespaces(), and binder::Context::generate().

bool binder::begins_with ( std::string const &  source,
std::string const &  prefix 
)
string binder::bind_constructor ( ConstructorBindingInfo const &  CBI,
uint  args_to_bind,
bool  request_bindings_f 
)
string binder::bind_constructor ( ConstructorBindingInfo const &  CBI)
string binder::bind_copy_constructor ( ConstructorBindingInfo const &  CBI)

Generate copy constructor in most cases this will be just: "\tcl.def(pybind11::init<{} const &>());\n"_format(binding_qualified_name); but for POD structs with zero data mambers this will be a lambda function. This is done as a workaround for Pybind11 2,2+ bug

References binder::ConstructorBindingInfo::C, binder::ConstructorBindingInfo::class_qualified_name, binder::ConstructorBindingInfo::T, binder::ConstructorBindingInfo::trampoline, and binder::ConstructorBindingInfo::trampoline_qualified_name.

Referenced by binder::ClassBinder::bind().

string binder::bind_data_member ( FieldDecl const *  d,
string const &  class_qualified_name 
)
string binder::bind_default_constructor ( ConstructorBindingInfo const &  CBI)
std::string binder::bind_enum ( std::string const &  module,
clang::EnumDecl const *  E 
)
std::string binder::bind_enum ( std::string const &  module,
EnumDecl const *  E 
)
std::string binder::bind_forward_declaration ( clang::CXXRecordDecl const *  C,
Context &   
)

Create forward-binding for given class which consist of only class type without any member, function or constructors.

string binder::bind_forward_declaration ( CXXRecordDecl const *  C,
Context &  context 
)

Create forward-binding for given class which consist of only class type without any member, function or constructors.

References class_qualified_name(), is_inherited_from_enable_shared_from_this(), line_number(), binder::Context::module_variable_name(), namespace_from_named_decl(), python_class_name(), and relevant_include().

std::string binder::bind_function ( std::string const &  module,
clang::FunctionDecl const *  F,
Context &  ,
clang::CXXRecordDecl const *  parent = nullptr,
bool  always_use_lambda = false 
)
string binder::bind_function ( FunctionDecl const *  F,
uint  args_to_bind,
bool  request_bindings_f,
Context &  context,
CXXRecordDecl const *  parent,
bool  always_use_lambda 
)
string binder::bind_function ( string const &  module,
FunctionDecl const *  F,
Context &  context,
CXXRecordDecl const *  parent,
bool  always_use_lambda 
)
string binder::bind_member_functions_for_call_back ( CXXRecordDecl const *  C,
string const &  class_name,
set< string > &  binded,
int ret_id,
std::vector< clang::FunctionDecl const * > &  prefix_includes 
)
string binder::binding_public_data_members ( CXXRecordDecl const *  C)
string binder::binding_public_member_functions ( CXXRecordDecl const *  C,
bool  callback_structure,
bool  callback_structure_constructible,
Context &  context 
)
string binder::binding_template_bases ( CXXRecordDecl const *  C,
bool  callback_structure,
bool  callback_structure_constructible,
Context &  context 
)
string binder::callback_structure_name ( CXXRecordDecl const *  C)
inline
std::string binder::class_name ( clang::CXXRecordDecl const *  C)
string binder::class_name ( CXXRecordDecl const *  C)
std::string binder::class_qualified_name ( clang::CXXRecordDecl const *  C)
string binder::class_qualified_name ( CXXRecordDecl const *  C)
bool binder::ends_with ( std::string const &  source,
std::string const &  prefix 
)

check if string ends with given prefix

References erraser_single_res_analysis::prefix.

std::string binder::expresion_to_string ( clang::Expr *  e)

Generate string representation of given expression.

References basic::options::OptionKeys::in::file::s.

string binder::file_name_prefix_for_binder ( BinderOP &  b)

Generate file name where binding for given generator should be stored.

References begins_with(), namespace_from_named_decl(), relevant_include(), and replace().

Referenced by binder::Context::generate().

void binder::fix_boolean_types ( string &  type)
std::string binder::function_arguments ( clang::FunctionDecl const *  record)
std::pair< std::string, std::string > binder::function_arguments_for_lambda ( clang::FunctionDecl const *  record,
uint  n 
)
std::tuple< std::string, std::string, std::string > binder::function_arguments_for_py_overload ( clang::FunctionDecl const *  record)
std::string binder::function_pointer_type ( clang::FunctionDecl const *  record)
string binder::function_pointer_type ( FunctionDecl const *  F)
std::string binder::function_qualified_name ( clang::FunctionDecl const *  F,
bool  omit_return_type = false 
)
string binder::function_qualified_name ( FunctionDecl const *  F,
bool  omit_return_type 
)
std::string binder::generate_comment_for_declaration ( clang::NamedDecl const *  decl)
std::string binder::generate_documentation_string_for_declaration ( clang::Decl const *  decl)
string binder::generate_include_directives ( IncludeSet const &  include_set)
std::vector<clang::NamedDecl const *> binder::get_decl_dependencies ( clang::CXXRecordDecl const *  C)
string binder::get_text ( comments::Comment const *  C,
SourceManager const &  SM,
SourceLocation  previous 
)
std::vector<clang::QualType> binder::get_type_dependencies ( clang::CXXRecordDecl const *  C)
vector<QualType> binder::get_type_dependencies ( CXXRecordDecl const *  C)
vector<QualType> binder::get_type_dependencies ( FunctionDecl const *  F)

generate human redable C++ type signature for given function

Referenced by add_relevant_includes(), is_binding_requested(), and is_skipping_requested().

std::string binder::indent ( string const &  code,
string const &  indentation 
)
bool binder::is_banned_symbol ( clang::NamedDecl const *  D)

References begins_with(), name, and standard_name().

Referenced by is_bindable(), and is_bindable_raw().

bool binder::is_bindable ( clang::EnumDecl const *  E)

check if generator can create binding

bool binder::is_bindable ( EnumDecl const *  E)

check if generator can create binding

References name.

Referenced by binder::EnumBinder::bindable().

bool binder::is_bindable ( clang::QualType const &  qt)
bool binder::is_bindable ( clang::FunctionDecl const *  F)

check if generator can create binding

bool binder::is_bindable ( FieldDecl *  f)
bool binder::is_bindable ( clang::CXXRecordDecl const *  C)
bool binder::is_bindable ( QualType const &  qt)

References begins_with(), and standard_name().

bool binder::is_bindable ( FunctionDecl const *  F)
bool binder::is_bindable_raw ( clang::CXXRecordDecl const *  C)

check if generator can create binding

References is_banned_symbol(), is_const_overload(), is_python_builtin(), is_std_function_bindable(), and test.T110_Numeric::m.

Referenced by is_bindable().

bool binder::is_binding_requested ( clang::QualType const &  qt,
Config const &  config 
)

check if user requested binding for the given QualType

References basic::options::OptionKeys::frags::scoring::config.

bool binder::is_binding_requested ( clang::FunctionDecl const *  F,
Config const &  config 
)

check if user requested binding for the given declaration

bool binder::is_binding_requested ( FunctionDecl const *  F,
Config const &  config 
)
bool binder::is_binding_requested ( clang::CXXRecordDecl const *  C,
Config const &  config 
)
bool binder::is_callback_structure_constructible ( CXXRecordDecl const *  C)
bool binder::is_callback_structure_needed ( CXXRecordDecl const *  C)
bool binder::is_const_overload ( CXXMethodDecl *  mc)
bool binder::is_field_assignable ( FieldDecl const *  f)

References C, and test.T110_Numeric::m.

Referenced by is_bindable().

bool binder::is_inherited_from_enable_shared_from_this ( CXXRecordDecl const *  C)
bool binder::is_overloadable ( clang::CXXMethodDecl const *  M)

check if methods could be overload in Python

bool binder::is_overloadable ( CXXMethodDecl const *  M)

check if methods could be overload in Python

Referenced by bind_member_functions_for_call_back().

bool binder::is_python_builtin ( clang::NamedDecl const *  C)

check if given class/struct is builtin in Python and therefor should not be binded

bool binder::is_python_builtin ( NamedDecl const *  C)

check if given class/struct is builtin in Python and therefor should not be binded

References name, and standard_name().

Referenced by is_bindable_raw(), binder::Binder::is_binded(), binder::Context::is_forward_needed(), and binder::Context::request_bindings().

bool binder::is_skipping_requested ( clang::QualType const &  qt,
Config const &  config 
)

check if user requested skipping for the given QualType

bool binder::is_skipping_requested ( QualType const &  qt,
Config const &  config 
)
bool binder::is_skipping_requested ( clang::FunctionDecl const *  F,
Config const &  config 
)

check if user requested skipping for the given declaration

bool binder::is_skipping_requested ( FunctionDecl const *  F,
Config const &  config 
)
bool binder::is_skipping_requested ( clang::CXXRecordDecl const *  C,
Config const &  config 
)
bool binder::is_std_function_bindable ( CXXRecordDecl const *  C)
std::string binder::last_namespace ( string const &  ns)

Calculate last namespace for given one: core::pose::motif –> motif.

References demo.D060_Folding::f.

Referenced by binder::Context::generate().

std::string binder::line_number ( clang::NamedDecl const *  decl)

calcualte line in source file for NamedDecl

string binder::line_number ( NamedDecl const *  decl)
std::string binder::mangle_type_name ( string const &  name,
bool  mark_template 
)
std::string binder::namespace_from_named_decl ( clang::NamedDecl const *  decl)

calculate namespace path from given NamedDecl, like: std, core::pose

string binder::namespace_from_named_decl ( NamedDecl const *  decl)
llvm::raw_ostream & binder::operator<< ( llvm::raw_ostream &  os,
Binder const &  b 
)
string binder::python_class_name ( CXXRecordDecl const *  C)
std::string binder::python_function_name ( clang::FunctionDecl const *  F)
string binder::python_function_name ( FunctionDecl const *  F)
std::string binder::relevant_include ( clang::NamedDecl const *  decl)
string binder::relevant_include ( NamedDecl const *  decl)
void binder::replace ( string &  r,
string const &  from,
string const &  to 
)
std::string binder::replace_ ( string const &  s,
string const &  from,
string const &  to 
)

Replace all occurrences of string and return result as new string.

References replace().

Referenced by callback_structure_name(), and binder::Context::generate().

void binder::request_bindings ( clang::QualType const &  qt,
Context &  context 
)
std::string binder::simplify_std_class_name ( string const &  type)

Attempt to simplify std:: name by removing unneded template arguments. Function assume that there is no 'std::' namespaces prefix at the beginning of the argument string.

References basic::options::OptionKeys::score::fiber_diffraction::p, res, and DRRAFTER::type.

Referenced by class_name(), and standard_name().

std::vector< std::string > binder::split ( string const &  buffer,
string const &  separator 
)
std::pair<string, string> binder::split_in_two ( string const &  s,
string const &  error_string 
)

Split string in two by ether space or tab character.

References min(), ObjexxFCL::space(), and split().

Referenced by binder::Config::read().

std::string binder::standard_name ( string const &  type)
std::string binder::template_argument_to_string ( clang::TemplateArgument const &  t)

Generate string representation of given TemplateArgument.

References basic::options::OptionKeys::in::file::s.

Referenced by binder::ClassBinder::bind_with(), and template_specialization().

std::string binder::template_specialization ( clang::CXXRecordDecl const *  C)
string binder::template_specialization ( FunctionDecl const *  F)
std::string binder::typename_from_type_decl ( clang::TypeDecl *  decl)
string binder::typename_from_type_decl ( TypeDecl *  decl)

generate unique string representation of type represented by given declaration

References standard_name().

Referenced by binder::Context::add(), and request_bindings().

void binder::update_source_file ( std::string const &  prefix,
std::string const &  file_name,
std::string const &  code 
)

Try to read exisitng file and if content does not match to code - write a new version. Also create nested dirs starting from prefix if nessesary.

References demo.D060_Folding::f, O_verbose, basic::options::OptionKeys::in::path::path, erraser_single_res_analysis::prefix, and split().

Variable Documentation

const char* binder::call_back_function_body_template
Initial value:
= R"_(
pybind11::gil_scoped_acquire gil;
pybind11::function overload = pybind11::get_overload(static_cast<const {0} *>(this), "{1}");
if (overload) {{
auto o = overload.operator()<pybind11::return_value_policy::reference>({2});
if (pybind11::detail::cast_is_temporary_value_reference<{3}>::value) {{
static pybind11::detail::overload_caster_t<{3}> caster;
return pybind11::detail::cast_ref<{3}>(std::move(o), caster);
}}
else return pybind11::detail::cast_safe<{3}>(std::move(o));
}}
)_"

Referenced by bind_member_functions_for_call_back().

char const* binder::constructor_template = "\tcl.def( pybind11::init( []({0}){{ return new {2}({1}); }} ), \"doc\");"

Referenced by bind_constructor().

char const* binder::constructor_with_trampoline_template = "\tcl.def( pybind11::init( []({0}){{ return new {2}({1}); }}, []({0}){{ return new {3}({1}); }} ), \"doc\");"

Referenced by bind_constructor().

std::map<string, string > const binder::cpp_python_operator_map
static
Initial value:
{
{"operator+", "__add__"},
{"operator-", "__sub__"},
{"operator*", "__mul__"},
{"operator/", "__div__"},
{"operator+=", "__iadd__"},
{"operator-=", "__isub__"},
{"operator*=", "__imul__"},
{"operator/=", "__idiv__"},
{"operator()", "__call__"},
{"operator==", "__eq__"},
{"operator!=", "__ne__"},
{"operator[]", "__getitem__"},
{"operator=", "assign"},
{"operator++", "plus_plus"},
{"operator--", "minus_minus"},
}

Referenced by is_bindable(), and python_function_name().

const char* binder::main_module_header
const char* binder::module_function_suffix = "(std::function< pybind11::module &(std::string const &namespace_) > &M)"
const char* binder::module_header
Initial value:
= R"_(
#include <pybind11/pybind11.h>
#include <functional>
#include <string>
{}
#ifndef BINDER_PYBIND11_TYPE_CASTER
#define BINDER_PYBIND11_TYPE_CASTER
PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
PYBIND11_DECLARE_HOLDER_TYPE(T, T*);
PYBIND11_MAKE_OPAQUE(std::shared_ptr<void>);
#endif
)_"

Referenced by binder::Context::generate().