Files
pybindgen/tests/foo.cc
T
2012-03-18 22:28:23 +00:00

554 lines
9.9 KiB
C++

#include "foo.h"
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <stdexcept>
int print_something(const char *message)
{
std::cout << "MESSAGE1: " << message << std::endl;
return strlen(message);
}
int print_something_else(const char *message2)
{
std::cout << "MESSAGE2: " << message2 << std::endl;
return strlen(message2);
}
int get_int_from_string(const char *from_string, int multiplier)
{
return atoi(from_string)*multiplier;
}
int get_int_from_float(double from_float, int multiplier)
{
return (int) from_float*multiplier;
}
std::string SomeObject::staticData = std::string("Hello Static World!");
SomeObject::~SomeObject ()
{
SomeObject::instance_count--;
delete m_foo_ptr;
if (m_zbr)
m_zbr->Unref ();
if (m_internal_zbr) {
m_internal_zbr->Unref ();
m_internal_zbr = NULL;
}
delete m_foobar;
m_foobar = NULL;
}
SomeObject::SomeObject (const SomeObject &other)
: m_prefix (other.m_prefix),
m_foobar (NULL)
{
if (other.m_foo_ptr)
m_foo_ptr = new Foo (*other.m_foo_ptr);
else
m_foo_ptr = NULL;
m_foo_shared_ptr = NULL;
if (other.m_zbr) {
m_zbr = other.m_zbr;
m_zbr->Ref();
} else
m_zbr = NULL;
m_internal_zbr = new Zbr;
m_pyobject = NULL;
m_foobar = NULL;
SomeObject::instance_count++;
}
SomeObject::SomeObject (std::string const prefix)
: m_prefix (prefix), m_foo_ptr (0),
m_foo_shared_ptr (0), m_zbr (0),
m_internal_zbr (new Zbr),
m_pyobject (NULL),
m_foobar (NULL)
{
SomeObject::instance_count++;
}
SomeObject::SomeObject (int prefix_len)
: m_prefix (prefix_len, 'X'), m_foo_ptr (0),
m_foo_shared_ptr (0), m_zbr (0),
m_internal_zbr (new Zbr),
m_pyobject (NULL),
m_foobar (NULL)
{
SomeObject::instance_count++;
}
int SomeObject::get_int (const char *from_string)
{
return atoi(from_string);
}
int SomeObject::get_int (double from_float)
{
return (int) from_float;
}
std::string
SomeObject::protected_method_that_is_not_virtual (std::string arg) const
{
return m_prefix + arg;
}
int SomeObject::instance_count = 0;
class HiddenClass : public Bar
{
};
Foo*
get_hidden_subclass_pointer ()
{
return new HiddenClass;
}
static SomeObject *g_someObject = 0;
// Transfer ownership of 'obj' to the library
void store_some_object(SomeObject *obj)
{
delete g_someObject;
g_someObject = obj;
}
// Invokes the virtual method in the stored SomeObject
std::string invoke_some_object_get_prefix()
{
if (g_someObject)
return g_someObject->get_prefix();
else
return std::string();
}
// Transfer ownership of 'obj' away from the library
SomeObject* take_some_object()
{
SomeObject *retval = g_someObject;
g_someObject = 0;
return retval;
}
// Deletes the contained object, if any
void delete_some_object()
{
delete g_someObject;
g_someObject = 0;
}
namespace xpto
{
std::string some_function()
{
return "hello";
}
std::string get_foo_datum(FooXpto const &foo)
{
return foo.get_datum();
}
}
Foo g_foo;
void function_that_takes_foo(Foo foo)
{
g_foo = foo;
}
Foo function_that_returns_foo()
{
return g_foo;
}
int Foo::instance_count = 0;
int SomeObject::NestedClass::instance_count = 0;
int Foobar::instance_count = 0;
int Box::instance_count = 0;
Foobar* get_foobar_with_other_as_custodian (SomeObject *other)
{
return other->get_foobar_with_self_as_custodian();
}
Foobar* create_new_foobar()
{
return new Foobar;
}
void set_foobar_with_other_as_custodian(Foobar *foobar, SomeObject *other)
{
other->set_foobar_with_self_as_custodian(foobar);
}
SomeObject * set_foobar_with_return_as_custodian(Foobar *foobar)
{
SomeObject *some = new SomeObject("xxx");
some->set_foobar_with_self_as_custodian(foobar);
return some;
}
std::string some_object_get_something_prefixed(const SomeObject *obj, const std::string something)
{
return obj->get_prefix() + something;
}
std::string some_object_val_get_something_prefixed(SomeObject obj, const std::string something)
{
return obj.get_prefix() + something;
}
std::string some_object_ref_get_something_prefixed(const SomeObject &obj, const std::string something)
{
return obj.get_prefix() + something;
}
namespace xpto
{
FooType g_fooType;
FooType get_foo_type ()
{
return g_fooType;
}
void set_foo_type (FooType type)
{
g_fooType = type;
}
void set_foo_type_inout (FooType &type)
{
FooType oldfooType = g_fooType;
g_fooType = type;
type = oldfooType;
}
void set_foo_type_ptr (FooType *type)
{
FooType oldfooType = g_fooType;
g_fooType = *type;
*type = oldfooType;
}
}
SingletonClass *SingletonClass::m_instance = NULL;
InterfaceId make_interface_id ()
{
return InterfaceId ();
}
template <> std::string TypeNameGet<int> (void)
{
return "int";
}
static Zbr *g_zbr = NULL;
int Zbr::instance_count = 0;
void store_zbr (Zbr *zbr)
{
if (g_zbr)
g_zbr->Unref ();
g_zbr = zbr;
}
int invoke_zbr (int x)
{
return g_zbr->get_int (x);
}
void delete_stored_zbr (void)
{
if (g_zbr)
g_zbr->Unref ();
g_zbr = NULL;
}
float matrix_sum_of_elements (float *matrix)
{
float result = 0;
for (int i = 0; i < 6; i++)
result += matrix[i];
return result;
}
void matrix_identity_new (float *matrix)
{
matrix[0] = 1;
matrix[1] = 0;
matrix[2] = 0;
matrix[3] = 0;
matrix[4] = 1;
matrix[5] = 0;
}
static SimpleStructList g_simpleList;
SimpleStructList get_simple_list ()
{
SimpleStructList retval;
for (int i = 0; i < 10; i++)
{
simple_struct_t val = {i};
retval.push_back(val);
}
return retval;
}
int set_simple_list (SimpleStructList list)
{
int count = 0;
g_simpleList = list;
for (SimpleStructList::iterator iter = g_simpleList.begin(); iter != g_simpleList.end(); iter++)
count += iter->xpto;
return count;
}
SimpleStructList
TestContainer::get_simple_list ()
{
SimpleStructList retval;
for (int i = 0; i < 10; i++)
{
simple_struct_t val = {i};
retval.push_back(val);
}
return retval;
}
int
TestContainer::set_simple_list (SimpleStructList list)
{
int count = 0;
m_simpleList = list;
for (SimpleStructList::iterator iter = m_simpleList.begin(); iter != m_simpleList.end(); iter++)
count += iter->xpto;
return count;
}
int
TestContainer::set_simple_list_by_ref (SimpleStructList &inout_list)
{
int count = 0;
m_simpleList = inout_list;
for (SimpleStructList::iterator iter = inout_list.begin(); iter != inout_list.end(); iter++)
{
iter->xpto *= 2;
count += iter->xpto;
}
return count;
}
std::vector<simple_struct_t>
TestContainer::get_simple_vec ()
{
std::vector<simple_struct_t> retval;
for (int i = 0; i < 10; i++)
{
simple_struct_t val = {i};
retval.push_back(val);
}
return retval;
}
int
TestContainer::set_simple_vec (std::vector<simple_struct_t> list)
{
int count = 0;
m_simpleList = list;
for (std::vector<simple_struct_t>::iterator iter = m_simpleList.begin(); iter != m_simpleList.end(); iter++)
count += iter->xpto;
return count;
}
SimpleStructMap
TestContainer::get_simple_map ()
{
SimpleStructMap retval;
for (int i = 0; i < 10; i++)
{
simple_struct_t val = {i};
std::ostringstream os;
os << i;
retval[os.str()] = val;
}
return retval;
}
int
TestContainer::set_simple_map (SimpleStructMap map)
{
int count = 0;
m_simpleMap = map;
for (SimpleStructMap::iterator iter = m_simpleMap.begin(); iter != m_simpleMap.end(); iter++)
count += iter->second.xpto;
return count;
}
void
TestContainer::get_vec (std::vector<std::string> &outVec)
{
outVec.clear ();
outVec.push_back ("hello");
outVec.push_back ("world");
}
void
TestContainer::set_vec_ptr (std::vector<std::string> *inVec)
{
m_vec = inVec;
}
void
TestContainer::get_vec_ptr (std::vector<std::string> *outVec)
{
*outVec = *m_vec;
}
std::map<std::string, int>
get_map ()
{
std::map<std::string, int> rv;
rv["123"] = 123;
rv["456"] = 456;
return rv;
}
std::set<uint32_t>
get_set ()
{
std::set<uint32_t> rv;
return rv;
}
namespace xpto
{
FlowId
get_flow_id (FlowId flowId)
{
return flowId + 1;
}
}
double
my_inverse_func (double x) throw (DomainError)
{
if (x == 0)
{
DomainError ex;
ex.message = "value must be != 0";
throw ex;
}
return 1/x;
}
double
ClassThatThrows::my_inverse_method (double x) throw (DomainError)
{
if (x == 0)
{
DomainError ex;
ex.message = "value must be != 0";
throw ex;
}
return 1/x;
}
ClassThatThrows::ClassThatThrows (double x) throw (DomainError)
{
if (x == 0)
{
DomainError ex;
ex.message = "value must be != 0";
throw ex;
}
}
int
ClassThatThrows::throw_error () const throw (std::exception)
{
throw std::runtime_error ("an error");
}
double
my_inverse_func2 (double x) throw (std::exception)
{
if (x == 0)
{
throw std::runtime_error ("value must be != 0");
}
return 1/x;
}
double
my_inverse_func3 (double x)
{
if (x == 0)
{
throw std::runtime_error ("value must be != 0");
}
return 1/x;
}
double
ClassThatThrows::my_inverse_method2 (double x) throw (std::exception)
{
if (x == 0)
{
throw std::runtime_error ("value must be != 0");
}
return 1/x;
}
double
ClassThatThrows::my_inverse_method3 (double x)
{
if (x == 0)
{
throw std::runtime_error ("value must be != 0");
}
return 1/x;
}
Tupl
my_throwing_func () throw (std::exception)
{
Tupl retval;
return retval;
}
int
test_args_kwargs(const char *args, const char *kwargs)
{
return (int) (kwargs - args);
}