Add Mathieu's 'c' example

This commit is contained in:
Gustavo J. A. M. Carneiro
2008-04-28 14:14:22 +01:00
parent e7f5ea6cac
commit 82b64a2543
6 changed files with 135 additions and 1 deletions
+47
View File
@@ -0,0 +1,47 @@
#include "c.h"
#include <iostream>
C::C ()
: m_c (0)
{
std::cout << "C::C" << std::endl;
}
C::C (uint32_t c)
: m_c (c)
{
std::cout << "C::C (uint32_t)" << std::endl;
}
C::~C ()
{
std::cout << "C::~C" << std::endl;
}
void
C::DoA (void)
{
std::cout << "C::DoA" << std::endl;
}
void
C::DoB (void)
{
std::cout << "C::DoB" << std::endl;
}
void
C::DoC (uint32_t c)
{
std::cout << "C::DoC=" << c << std::endl;
m_c = c;
}
uint32_t
C::DoD (void)
{
std::cout << "C::DoD" << std::endl;
return m_c;
}
void
C::DoE (void)
{
std::cout << "C::DoE" << std::endl;
}
+17
View File
@@ -0,0 +1,17 @@
#include <stdint.h>
class C
{
public:
C ();
C (uint32_t c);
virtual ~C ();
static void DoA (void);
void DoB (void);
void DoC (uint32_t c);
uint32_t DoD (void);
virtual void DoE (void);
private:
uint32_t m_c;
};
+11
View File
@@ -0,0 +1,11 @@
import sys
sys.path.insert(0, "../../build/default/examples/c")
from c import *
c = C (10)
C.DoA ()
c.DoB ()
c.DoC (5)
c_v = c.DoD ()
c.DoE ()
+29
View File
@@ -0,0 +1,29 @@
#! /usr/bin/env python
import sys
import pybindgen
from pybindgen import (ReturnValue, Parameter, Module, Function, FileCodeSink)
from pybindgen import (CppMethod, CppConstructor, CppClass, Enum)
def my_module_gen(out_file):
pybindgen.write_preamble(FileCodeSink(out_file))
print >> out_file, "#include \"c.h\""
mod = Module('c')
C = CppClass('C')
mod.add_class(C)
C.add_constructor(CppConstructor([]))
C.add_constructor(CppConstructor([Parameter.new('uint32_t', 'c')]))
C.add_method(CppMethod(ReturnValue.new('void'), 'DoA', [], is_static=True))
C.add_method(CppMethod(ReturnValue.new('void'), 'DoB', []))
C.add_method(CppMethod(ReturnValue.new('void'), 'DoC', [Parameter.new('uint32_t', 'c')]))
C.add_method(CppMethod(ReturnValue.new('uint32_t'), 'DoD', []))
C.add_method(CppMethod(ReturnValue.new('void'), 'DoE', [], is_virtual=True))
mod.generate(FileCodeSink(out_file) )
if __name__ == '__main__':
my_module_gen(sys.stdout)
+30
View File
@@ -0,0 +1,30 @@
## -*- python -*-
import Params
def create_pyext_obj(bld, c_or_cpp_type):
waf_version = [int (s) for s in Params.g_version.split('.')]
if waf_version >= [1,4]:
return bld.create_obj(c_or_cpp_type, 'shlib', 'pyext')
else:
return bld.create_obj(c_or_cpp_type, 'plugin', 'pyext')
def build(bld):
## manual code generation using simple pybindgen API calls
bindgen = bld.create_obj('command-output')
bindgen.stdout = 'cmodule.cc'
bindgen.argv = [bindgen.input_file('modulegen.py')]
bindgen.command = bindgen.env['PYTHON']
bindgen.command_is_external = True
bindgen.prio = 55 # must run after the 'py' objects in ../pybindgen
obj = create_pyext_obj(bld, 'cpp')
obj.source = [
'c.cc',
'cmodule.cc'
]
obj.target = 'c'
obj.inst_var = 0 # do not install
## Workaround a WAF bug (http://code.google.com/p/waf/issues/detail?id=37)
obj.env.append_value("CPPPATH", bld.m_curdirnode.srcpath(obj.env))
+1 -1
View File
@@ -1,5 +1,5 @@
## -*- python -*-
def build(bld):
bld.add_subdirs('a b')
bld.add_subdirs('a b c')