ffi-inline 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  module FFI; module Inliner
2
2
 
3
- Signature = ::Struct.new(:return, :name, :arguments, :arity)
3
+ Signature = ::Struct.new(:return, :name, :arguments, :arity, :blocking)
4
4
 
5
5
  class Builder
6
6
  @builders = []
@@ -84,7 +84,7 @@ class Builder
84
84
  builder.signatures.each {|s|
85
85
  attach_function s.name, s.arguments.compact.map {|a|
86
86
  builder.to_ffi_type(a, self)
87
- }, builder.to_ffi_type(s.return, self)
87
+ }, builder.to_ffi_type(s.return, self), :blocking => s.blocking
88
88
  }
89
89
  }
90
90
 
@@ -63,6 +63,7 @@ Builder.define :c do
63
63
  if signature
64
64
  parsed[:arguments] = signature[:arguments] if signature[:arguments]
65
65
  parsed[:return] = signature[:return] if signature[:return]
66
+ parsed[:blocking] = signature[:blocking] if signature[:blocking]
66
67
  end
67
68
 
68
69
  @signatures << parsed
@@ -16,6 +16,7 @@ Builder.define Builder[:c], :cplusplus, :cxx, :cpp, 'c++' do
16
16
  if signature
17
17
  parsed[:arguments] = signature[:arguments] if signature[:arguments]
18
18
  parsed[:return] = signature[:return] if signature[:return]
19
+ parsed[:blocking] = signature[:blocking] if signature[:blocking]
19
20
  end
20
21
 
21
22
  @signatures << parsed
@@ -1,7 +1,7 @@
1
1
  module FFI
2
2
 
3
3
  module Inliner
4
- Version = '0.0.1'
4
+ Version = '0.0.2'
5
5
  end
6
6
 
7
7
  end
data/spec/inliner_spec.rb CHANGED
@@ -232,6 +232,27 @@ EOC
232
232
  }.should raise_error(/compile error/)
233
233
  end
234
234
 
235
+ it 'should respect blocking flag' do
236
+ module Foo
237
+ inline do |builder|
238
+ builder.function %{
239
+ void blocking_function () {
240
+ #if defined(_WIN32)
241
+ Sleep(1000);
242
+ #else
243
+ sleep(1);
244
+ #endif
245
+ }
246
+ }, :blocking=>true
247
+ end
248
+ end
249
+
250
+ st = Time.now
251
+ Array.new(4){ Thread.new{ Foo.blocking_function } }.map(&:join)
252
+
253
+ (Time.now - st).should < 4
254
+ end
255
+
235
256
  describe 'GXX compiler' do
236
257
  it 'should compile and link a shim C library that encapsulates C++ code' do
237
258
  module Foo
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-inline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-15 00:00:00.000000000 Z
12
+ date: 2012-03-16 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi
16
- requirement: &10074040 !ruby/object:Gem::Requirement
16
+ requirement: &13638240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *10074040
24
+ version_requirements: *13638240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &10073120 !ruby/object:Gem::Requirement
27
+ requirement: &13634060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *10073120
35
+ version_requirements: *13634060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &10072380 !ruby/object:Gem::Requirement
38
+ requirement: &13632840 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *10072380
46
+ version_requirements: *13632840
47
47
  description:
48
48
  email: meh@paranoici.org
49
49
  executables: []
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  requirements: []
87
87
  rubyforge_project:
88
- rubygems_version: 1.8.15
88
+ rubygems_version: 1.8.11
89
89
  signing_key:
90
90
  specification_version: 3
91
91
  summary: Inline C/C++ in Ruby easily and cleanly.