cplus2ruby 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +3 -3
- data/cplus2ruby.gemspec +1 -1
- data/example.rb +1 -1
- data/lib/cplus2ruby/compiler.rb +3 -1
- data/lib/cplus2ruby/model.rb +31 -20
- data/test/test_mixin.rb +2 -2
- metadata +2 -10
- data/test/work/Makefile +0 -149
- data/test/work/test_mixin.cc +0 -23
- data/test/work/test_mixin.h +0 -51
- data/test/work/test_mixin.o +0 -0
- data/test/work/test_mixin.so +0 -0
- data/test/work/test_mixin_wrap.cc +0 -105
- data/test/work/test_mixin_wrap.o +0 -0
data/README
CHANGED
@@ -84,7 +84,7 @@ EXAMPLE
|
|
84
84
|
#
|
85
85
|
# Generate C++ code, compile and load shared library.
|
86
86
|
#
|
87
|
-
Cplus2Ruby.
|
87
|
+
Cplus2Ruby.commit('work/neural')
|
88
88
|
|
89
89
|
n = Neuron.new
|
90
90
|
n.id = "n1"
|
@@ -189,7 +189,7 @@ FEATURES
|
|
189
189
|
|
190
190
|
Compilation flags etc.:
|
191
191
|
|
192
|
-
Cplus2Ruby.
|
192
|
+
Cplus2Ruby.commit(module_name, force_compilation, cflags, ldflags)
|
193
193
|
|
194
194
|
For example:
|
195
195
|
|
@@ -197,7 +197,7 @@ FEATURES
|
|
197
197
|
# force_compilation => true regenerates and recompiles the
|
198
198
|
# C++ code every time.
|
199
199
|
#
|
200
|
-
Cplus2Ruby.
|
200
|
+
Cplus2Ruby.commit("work/mymodule", true, '-DNDEBUG -Winline -Wall', '-lm')
|
201
201
|
|
202
202
|
BUGS
|
203
203
|
|
data/cplus2ruby.gemspec
CHANGED
data/example.rb
CHANGED
data/lib/cplus2ruby/compiler.rb
CHANGED
@@ -13,7 +13,7 @@ class Cplus2Ruby::Compiler
|
|
13
13
|
wrap_cg.write_files(mod_name)
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
16
|
+
def commit(file, force_compilation=false, cflags="", libs="", &block)
|
17
17
|
n = names(file)
|
18
18
|
|
19
19
|
if not force_compilation
|
@@ -30,6 +30,8 @@ class Cplus2Ruby::Compiler
|
|
30
30
|
block.call if block
|
31
31
|
end
|
32
32
|
|
33
|
+
alias startup commit
|
34
|
+
|
33
35
|
#
|
34
36
|
# Compiles +file+. Returns the name of the shared object to
|
35
37
|
# use by +require+.
|
data/lib/cplus2ruby/model.rb
CHANGED
@@ -45,27 +45,34 @@ class Cplus2Ruby::Model
|
|
45
45
|
usage_cnt
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
def cmp_entities(a,b)
|
49
|
+
if a.ancestors.include?(b)
|
50
|
+
# a 'after' b (a > b)
|
51
|
+
1
|
52
|
+
elsif b.ancestors.include?(a)
|
53
|
+
-1
|
54
|
+
else
|
55
|
+
ea = entity_usage(a, b)
|
56
|
+
eb = entity_usage(b, a)
|
57
|
+
|
58
|
+
if ea > 0 and eb == 0
|
54
59
|
-1
|
60
|
+
elsif eb > 0 and ea == 0
|
61
|
+
1
|
55
62
|
else
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
if ea > 0 and eb == 0
|
60
|
-
-1
|
61
|
-
elsif eb > 0 and ea == 0
|
62
|
-
1
|
63
|
-
else
|
64
|
-
ao = (a.heritage(:__options__) || {})[:order] || 0
|
65
|
-
bo = (b.heritage(:__options__) || {})[:order] || 0
|
66
|
-
ao <=> bo
|
67
|
-
end
|
63
|
+
ao = (a.heritage(:__options__) || {})[:order] || 0
|
64
|
+
bo = (b.heritage(:__options__) || {})[:order] || 0
|
65
|
+
ao <=> bo
|
68
66
|
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def entities_ordered
|
71
|
+
ents = entities()
|
72
|
+
ents.sort_by {|entity|
|
73
|
+
ents.inject(0) {|accum, e|
|
74
|
+
accum + (cmp_entities(entity, e) == 1 ? 1 : 0)
|
75
|
+
}
|
69
76
|
}
|
70
77
|
end
|
71
78
|
|
@@ -114,9 +121,13 @@ module Cplus2Ruby
|
|
114
121
|
h.each {|from, to| model.typing.alias_entry(from, to)}
|
115
122
|
end
|
116
123
|
|
117
|
-
def self.
|
124
|
+
def self.commit(*args, &block)
|
118
125
|
self.model.finish!
|
119
|
-
Cplus2Ruby::Compiler.new(self.model).
|
126
|
+
Cplus2Ruby::Compiler.new(self.model).commit(*args, &block)
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.startup(*args, &block)
|
130
|
+
commit(*args, &block)
|
120
131
|
end
|
121
132
|
|
122
133
|
def self.compile(*args)
|
data/test/test_mixin.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
$LOAD_PATH.unshift '../
|
2
|
+
$LOAD_PATH.unshift '../lib'
|
3
3
|
require 'cplus2ruby'
|
4
4
|
|
5
5
|
module Mixin1; cplus2ruby
|
@@ -18,7 +18,7 @@ class C < B; cplus2ruby
|
|
18
18
|
property :z, :int
|
19
19
|
end
|
20
20
|
|
21
|
-
Cplus2Ruby.
|
21
|
+
Cplus2Ruby.commit('work/test_mixin', true)
|
22
22
|
t = B.new
|
23
23
|
t.y = 2
|
24
24
|
p t.y
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cplus2ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Neumann
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-03-
|
12
|
+
date: 2008-03-26 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -44,14 +44,6 @@ files:
|
|
44
44
|
- lib/cplus2ruby/code_generator.rb
|
45
45
|
- test
|
46
46
|
- test/test_mixin.rb
|
47
|
-
- test/work
|
48
|
-
- test/work/test_mixin.h
|
49
|
-
- test/work/test_mixin.o
|
50
|
-
- test/work/test_mixin.cc
|
51
|
-
- test/work/Makefile
|
52
|
-
- test/work/test_mixin.so
|
53
|
-
- test/work/test_mixin_wrap.cc
|
54
|
-
- test/work/test_mixin_wrap.o
|
55
47
|
has_rdoc: false
|
56
48
|
homepage: http://www.ntecs.de/projects/cplus2ruby/
|
57
49
|
post_install_message:
|
data/test/work/Makefile
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
|
2
|
-
SHELL = /bin/sh
|
3
|
-
|
4
|
-
#### Start of system configuration section. ####
|
5
|
-
|
6
|
-
srcdir = .
|
7
|
-
topdir = /usr/local/lib/ruby/1.8/i386-freebsd7
|
8
|
-
hdrdir = $(topdir)
|
9
|
-
VPATH = $(srcdir):$(topdir):$(hdrdir)
|
10
|
-
prefix = $(DESTDIR)/usr/local
|
11
|
-
exec_prefix = $(prefix)
|
12
|
-
sitedir = $(prefix)/lib/ruby/site_ruby
|
13
|
-
rubylibdir = $(libdir)/ruby/$(ruby_version)
|
14
|
-
docdir = $(datarootdir)/doc/$(PACKAGE)
|
15
|
-
dvidir = $(docdir)
|
16
|
-
datarootdir = $(prefix)/share
|
17
|
-
archdir = $(rubylibdir)/$(arch)
|
18
|
-
sbindir = $(exec_prefix)/sbin
|
19
|
-
psdir = $(docdir)
|
20
|
-
localedir = $(datarootdir)/locale
|
21
|
-
htmldir = $(docdir)
|
22
|
-
datadir = $(datarootdir)
|
23
|
-
includedir = $(prefix)/include
|
24
|
-
infodir = $(DESTDIR)/usr/local/info/
|
25
|
-
sysconfdir = $(prefix)/etc
|
26
|
-
mandir = $(DESTDIR)/usr/local/man
|
27
|
-
libdir = $(exec_prefix)/lib
|
28
|
-
sharedstatedir = $(prefix)/com
|
29
|
-
oldincludedir = $(DESTDIR)/usr/include
|
30
|
-
pdfdir = $(docdir)
|
31
|
-
sitearchdir = $(sitelibdir)/$(sitearch)
|
32
|
-
bindir = $(exec_prefix)/bin
|
33
|
-
localstatedir = $(prefix)/var
|
34
|
-
sitelibdir = $(sitedir)/$(ruby_version)
|
35
|
-
libexecdir = $(exec_prefix)/libexec
|
36
|
-
|
37
|
-
CC = cc
|
38
|
-
LIBRUBY = $(LIBRUBY_SO)
|
39
|
-
LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a
|
40
|
-
LIBRUBYARG_SHARED = -Wl,-R -Wl,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)
|
41
|
-
LIBRUBYARG_STATIC = -l$(RUBY_SO_NAME)-static
|
42
|
-
|
43
|
-
RUBY_EXTCONF_H =
|
44
|
-
CFLAGS = -fPIC
|
45
|
-
INCFLAGS = -I. -I$(topdir) -I$(hdrdir) -I$(srcdir)
|
46
|
-
CPPFLAGS =
|
47
|
-
CXXFLAGS = $(CFLAGS)
|
48
|
-
DLDFLAGS = -L. -rdynamic -Wl,-soname,$(.TARGET)
|
49
|
-
LDSHARED = cc -shared
|
50
|
-
AR = ar
|
51
|
-
EXEEXT =
|
52
|
-
|
53
|
-
RUBY_INSTALL_NAME = ruby18
|
54
|
-
RUBY_SO_NAME = ruby18
|
55
|
-
arch = i386-freebsd7
|
56
|
-
sitearch = i386-freebsd7
|
57
|
-
ruby_version = 1.8
|
58
|
-
ruby = /usr/local/bin/ruby18
|
59
|
-
RUBY = $(ruby)
|
60
|
-
RM = rm -f
|
61
|
-
MAKEDIRS = mkdir -p
|
62
|
-
INSTALL = /usr/bin/install -c -o root -g wheel
|
63
|
-
INSTALL_PROG = $(INSTALL) -m 0755
|
64
|
-
INSTALL_DATA = install -o root -g wheel -m 444
|
65
|
-
COPY = cp
|
66
|
-
|
67
|
-
#### End of system configuration section. ####
|
68
|
-
|
69
|
-
preload =
|
70
|
-
|
71
|
-
libpath = . $(libdir)
|
72
|
-
LIBPATH = -L'.' -L'$(libdir)' -Wl,-R'$(libdir)'
|
73
|
-
DEFFILE =
|
74
|
-
|
75
|
-
CLEANFILES = mkmf.log
|
76
|
-
DISTCLEANFILES =
|
77
|
-
|
78
|
-
extout =
|
79
|
-
extout_prefix =
|
80
|
-
target_prefix =
|
81
|
-
LOCAL_LIBS =
|
82
|
-
LIBS = $(LIBRUBYARG_SHARED) -lcrypt -lm -rpath=/usr/lib:/usr/local/lib -pthread -lc -lstdc++
|
83
|
-
SRCS = test_mixin.cc test_mixin_wrap.cc
|
84
|
-
OBJS = test_mixin.o test_mixin_wrap.o
|
85
|
-
TARGET = test_mixin
|
86
|
-
DLLIB = $(TARGET).so
|
87
|
-
EXTSTATIC =
|
88
|
-
STATIC_LIB =
|
89
|
-
|
90
|
-
RUBYCOMMONDIR = $(sitedir)$(target_prefix)
|
91
|
-
RUBYLIBDIR = $(sitelibdir)$(target_prefix)
|
92
|
-
RUBYARCHDIR = $(sitearchdir)$(target_prefix)
|
93
|
-
|
94
|
-
TARGET_SO = $(DLLIB)
|
95
|
-
CLEANLIBS = $(TARGET).so $(TARGET).il? $(TARGET).tds $(TARGET).map
|
96
|
-
CLEANOBJS = *.o *.a *.s[ol] *.pdb *.exp *.bak
|
97
|
-
|
98
|
-
all: $(DLLIB)
|
99
|
-
static: $(STATIC_LIB)
|
100
|
-
|
101
|
-
clean:
|
102
|
-
@-$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES)
|
103
|
-
|
104
|
-
distclean: clean
|
105
|
-
@-$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log
|
106
|
-
@-$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES)
|
107
|
-
|
108
|
-
realclean: distclean
|
109
|
-
install: install-so install-rb
|
110
|
-
|
111
|
-
install-so: $(RUBYARCHDIR)
|
112
|
-
install-so: $(RUBYARCHDIR)/$(DLLIB)
|
113
|
-
$(RUBYARCHDIR)/$(DLLIB): $(DLLIB)
|
114
|
-
$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
|
115
|
-
install-rb: pre-install-rb install-rb-default
|
116
|
-
install-rb-default: pre-install-rb-default
|
117
|
-
pre-install-rb: Makefile
|
118
|
-
pre-install-rb-default: Makefile
|
119
|
-
$(RUBYARCHDIR):
|
120
|
-
$(MAKEDIRS) $@
|
121
|
-
|
122
|
-
site-install: site-install-so site-install-rb install
|
123
|
-
site-install-so: install-so
|
124
|
-
site-install-rb: install-rb
|
125
|
-
|
126
|
-
.SUFFIXES: .c .m .cc .cxx .cpp .C .o
|
127
|
-
|
128
|
-
.cc.o:
|
129
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
130
|
-
|
131
|
-
.cxx.o:
|
132
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
133
|
-
|
134
|
-
.cpp.o:
|
135
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
136
|
-
|
137
|
-
.C.o:
|
138
|
-
$(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) -c $<
|
139
|
-
|
140
|
-
.c.o:
|
141
|
-
$(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) -c $<
|
142
|
-
|
143
|
-
$(DLLIB): $(OBJS)
|
144
|
-
@-$(RM) $@
|
145
|
-
$(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS)
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
$(OBJS): ruby.h defines.h
|
data/test/work/test_mixin.cc
DELETED
data/test/work/test_mixin.h
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
#include <stdlib.h>
|
2
|
-
#include "ruby.h"
|
3
|
-
struct RubyObject {
|
4
|
-
VALUE __obj__;
|
5
|
-
RubyObject() { __obj__ = Qnil; }
|
6
|
-
virtual ~RubyObject() {};
|
7
|
-
static void __free(void *ptr) { ((RubyObject*)ptr)->__free__(); }
|
8
|
-
static void __mark(void *ptr) { ((RubyObject*)ptr)->__mark__(); }
|
9
|
-
virtual void __free__() { delete this; }
|
10
|
-
virtual void __mark__() { }
|
11
|
-
};
|
12
|
-
struct A;
|
13
|
-
struct B;
|
14
|
-
struct C;
|
15
|
-
|
16
|
-
struct A : RubyObject
|
17
|
-
{
|
18
|
-
typedef RubyObject super;
|
19
|
-
|
20
|
-
A();
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
int y;
|
26
|
-
};
|
27
|
-
|
28
|
-
struct B : A
|
29
|
-
{
|
30
|
-
typedef A super;
|
31
|
-
|
32
|
-
B();
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
int a;
|
38
|
-
};
|
39
|
-
|
40
|
-
struct C : B
|
41
|
-
{
|
42
|
-
typedef B super;
|
43
|
-
|
44
|
-
C();
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
int z;
|
50
|
-
};
|
51
|
-
|
data/test/work/test_mixin.o
DELETED
Binary file
|
data/test/work/test_mixin.so
DELETED
Binary file
|
@@ -1,105 +0,0 @@
|
|
1
|
-
#include "test_mixin.h"
|
2
|
-
|
3
|
-
|
4
|
-
static VALUE
|
5
|
-
A_alloc__(VALUE klass)
|
6
|
-
{
|
7
|
-
A *__cobj__;
|
8
|
-
__cobj__ = new A();
|
9
|
-
__cobj__->__obj__ = Data_Wrap_Struct(klass, RubyObject::__mark, RubyObject::__free, __cobj__);
|
10
|
-
return __cobj__->__obj__;
|
11
|
-
}
|
12
|
-
static VALUE
|
13
|
-
A_get__y(VALUE __self__)
|
14
|
-
{
|
15
|
-
int __res__;
|
16
|
-
A *__cobj__;
|
17
|
-
Check_Type(__self__, T_DATA);
|
18
|
-
__cobj__ = (A*) DATA_PTR(__self__);
|
19
|
-
__res__ = __cobj__->y;
|
20
|
-
return INT2NUM(__res__);
|
21
|
-
}
|
22
|
-
static VALUE
|
23
|
-
A_set__y(VALUE __self__, VALUE __val__)
|
24
|
-
{
|
25
|
-
A *__cobj__;
|
26
|
-
Check_Type(__self__, T_DATA);
|
27
|
-
__cobj__ = (A*) DATA_PTR(__self__);
|
28
|
-
;
|
29
|
-
__cobj__->y = (int)NUM2INT(__val__);
|
30
|
-
return Qnil;
|
31
|
-
}
|
32
|
-
|
33
|
-
static VALUE
|
34
|
-
B_alloc__(VALUE klass)
|
35
|
-
{
|
36
|
-
B *__cobj__;
|
37
|
-
__cobj__ = new B();
|
38
|
-
__cobj__->__obj__ = Data_Wrap_Struct(klass, RubyObject::__mark, RubyObject::__free, __cobj__);
|
39
|
-
return __cobj__->__obj__;
|
40
|
-
}
|
41
|
-
static VALUE
|
42
|
-
B_get__a(VALUE __self__)
|
43
|
-
{
|
44
|
-
int __res__;
|
45
|
-
B *__cobj__;
|
46
|
-
Check_Type(__self__, T_DATA);
|
47
|
-
__cobj__ = (B*) DATA_PTR(__self__);
|
48
|
-
__res__ = __cobj__->a;
|
49
|
-
return INT2NUM(__res__);
|
50
|
-
}
|
51
|
-
static VALUE
|
52
|
-
B_set__a(VALUE __self__, VALUE __val__)
|
53
|
-
{
|
54
|
-
B *__cobj__;
|
55
|
-
Check_Type(__self__, T_DATA);
|
56
|
-
__cobj__ = (B*) DATA_PTR(__self__);
|
57
|
-
;
|
58
|
-
__cobj__->a = (int)NUM2INT(__val__);
|
59
|
-
return Qnil;
|
60
|
-
}
|
61
|
-
|
62
|
-
static VALUE
|
63
|
-
C_alloc__(VALUE klass)
|
64
|
-
{
|
65
|
-
C *__cobj__;
|
66
|
-
__cobj__ = new C();
|
67
|
-
__cobj__->__obj__ = Data_Wrap_Struct(klass, RubyObject::__mark, RubyObject::__free, __cobj__);
|
68
|
-
return __cobj__->__obj__;
|
69
|
-
}
|
70
|
-
static VALUE
|
71
|
-
C_get__z(VALUE __self__)
|
72
|
-
{
|
73
|
-
int __res__;
|
74
|
-
C *__cobj__;
|
75
|
-
Check_Type(__self__, T_DATA);
|
76
|
-
__cobj__ = (C*) DATA_PTR(__self__);
|
77
|
-
__res__ = __cobj__->z;
|
78
|
-
return INT2NUM(__res__);
|
79
|
-
}
|
80
|
-
static VALUE
|
81
|
-
C_set__z(VALUE __self__, VALUE __val__)
|
82
|
-
{
|
83
|
-
C *__cobj__;
|
84
|
-
Check_Type(__self__, T_DATA);
|
85
|
-
__cobj__ = (C*) DATA_PTR(__self__);
|
86
|
-
;
|
87
|
-
__cobj__->z = (int)NUM2INT(__val__);
|
88
|
-
return Qnil;
|
89
|
-
}
|
90
|
-
extern "C" void Init_test_mixin()
|
91
|
-
{
|
92
|
-
VALUE klass;
|
93
|
-
klass = rb_eval_string("A");
|
94
|
-
rb_define_alloc_func(klass, A_alloc__);
|
95
|
-
rb_define_method(klass, "y", (VALUE(*)(...))A_get__y, 0);
|
96
|
-
rb_define_method(klass, "y=", (VALUE(*)(...))A_set__y, 1);
|
97
|
-
klass = rb_eval_string("B");
|
98
|
-
rb_define_alloc_func(klass, B_alloc__);
|
99
|
-
rb_define_method(klass, "a", (VALUE(*)(...))B_get__a, 0);
|
100
|
-
rb_define_method(klass, "a=", (VALUE(*)(...))B_set__a, 1);
|
101
|
-
klass = rb_eval_string("C");
|
102
|
-
rb_define_alloc_func(klass, C_alloc__);
|
103
|
-
rb_define_method(klass, "z", (VALUE(*)(...))C_get__z, 0);
|
104
|
-
rb_define_method(klass, "z=", (VALUE(*)(...))C_set__z, 1);
|
105
|
-
}
|
data/test/work/test_mixin_wrap.o
DELETED
Binary file
|