/**
 * Simple example of a C++ class that can be binded using the
 * automatic script generator
 */

#include "simple_class.h"

SimpleNativeClass::SimpleNativeClass()
{
	// just set some fields
	m_someField = 0;
	m_someOtherField = 10;
	m_anotherMoreComplexField = NULL;
}

// empty destructor
SimpleNativeClass::~SimpleNativeClass()
{
}

long long SimpleNativeClass::thisReturnsALongLong() {
	static long long __id = 0;
	return __id++;
}

void SimpleNativeClass::func() {
}

void SimpleNativeClass::func(int a) {
}

void SimpleNativeClass::func(int a, float b) {
}

long long SimpleNativeClass::receivesLongLong(long long someId) {
	return someId + 1;
}

std::string SimpleNativeClass::returnsAString() {
	std::string myString = "my std::string";
	return myString;
}

const char *SimpleNativeClass::returnsACString() {
	return "this is a c-string";
}

// just a very simple function :)
int SimpleNativeClass::doSomeProcessing(std::string arg1, std::string arg2)
{
	return arg1.length() + arg2.length();
}

void SimpleNativeClass::setAnotherMoreComplexField(const char *str)
{
	if (m_anotherMoreComplexField) {
		free(m_anotherMoreComplexField);
	}
	size_t len = strlen(str);
	m_anotherMoreComplexField = (char *)malloc(len);
	memcpy(m_anotherMoreComplexField, str, len);
}

namespace SomeNamespace
{
AnotherClass::AnotherClass()
{
	justOneField = 1313;
	aPublicField = 1337;
}
// empty destructor
AnotherClass::~AnotherClass()
{
}

void AnotherClass::doSomethingSimple() {
	fprintf(stderr, "just doing something simple\n");
}
};