Add Mathieu's 'c' example
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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 ()
|
||||
|
||||
@@ -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)
|
||||
@@ -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
@@ -1,5 +1,5 @@
|
||||
## -*- python -*-
|
||||
|
||||
def build(bld):
|
||||
bld.add_subdirs('a b')
|
||||
bld.add_subdirs('a b c')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user