rbind 0.0.31 → 0.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 769543a90bfc2ffaac9767a4beaef69a6d3c350c5e97bc8aca027db1f69c5fd4
4
- data.tar.gz: 855908c1da39e65bd80cc36218a4adb8b82dc9613b6687de6085aab05abe5ae4
3
+ metadata.gz: 4af779a4a5ab2c2ddebe6be732475e1ecf30c405760a70dbfe5f547af557bd40
4
+ data.tar.gz: aa14b3cd31d66748c8aed14b9a6ae4c232273d0db3e2fcdf997fb0d877ec7973
5
5
  SHA512:
6
- metadata.gz: 1a5db203492358309ce27edc23b8be0e321c938c57df3befc75a9d24965184a426d9a835184c6b7ed9dbe38536e9f900e5de98d7d4f8f86093276b9d2e99c640
7
- data.tar.gz: a3f3ea618b6d0ba64de0d40d5b573264b40dd8f4c49c2a923aaf6dd4af10eba7f03cab7c5d5408b2c3c294c0dd2a4d8237e14ede7e29115b9d93448f51e259a5
6
+ metadata.gz: 599b08d1f9706bfc53bc782666731fb00a8b3b027ba6c471e6973c9d1d14d97bde626534581a68cfe3e75b458417ce49b45aaff1e548b755470f8e7db3ecbf36
7
+ data.tar.gz: 1890afa6e1ac7843df9447082a384f4946950e4deb5d23f06cb907507ce88352a36e4b12a00bafb5389aa043fb395ad4415ad538f8060f5f2cfbc106bd671d16
@@ -208,5 +208,27 @@ module Rbind
208
208
  @specialize_ruby.call
209
209
  end
210
210
  end
211
+
212
+ # overwrite c
213
+ # depends on type
214
+ # at the moment only operations can be overwritten
215
+ def overwrite_c(&block)
216
+ if block
217
+ @overwrite_c = block
218
+ elsif @overwrite_c
219
+ @overwrite_c.call
220
+ end
221
+ end
222
+
223
+ # overwrite ruby
224
+ # depends on type
225
+ # at the moment only rbind_from_native can be overwritten
226
+ def overwrite_ruby(&block)
227
+ if block
228
+ @overwrite_ruby = block
229
+ elsif @overwrite_ruby
230
+ @overwrite_ruby.call
231
+ end
232
+ end
211
233
  end
212
234
  end
@@ -108,8 +108,8 @@ module Rbind
108
108
  o == other_op
109
109
  end
110
110
  next false if !op
111
- next true if o.base_class == self
112
- next true if o.base_class == other_op.base_class
111
+ next true if op.base_class == self
112
+ next true if op.base_class == other_op.base_class
113
113
 
114
114
  # ambiguous name look up due to multi
115
115
  # inheritance
@@ -91,6 +91,7 @@ module Rbind
91
91
  type_name = array.shift
92
92
  para_name = array.shift
93
93
  default = unmask_template(array.join(" ").gsub("/C",""))
94
+ default.gsub!("/Ref","")
94
95
  type = find_type(owner,type_name)
95
96
  flags = normalize_flags(line_number,flags,:IO,:O)
96
97
  type = if flags.include?(:O) || flags.include?(:IO)
@@ -132,7 +133,7 @@ module Rbind
132
133
  def parse_class(line_number,string)
133
134
  lines = string.split("\n")
134
135
  a = lines.shift.rstrip
135
- unless a =~ /class ([<>a-zA-Z\.\d_:]*) ?:?([<>a-zA-Z\.\:, \d_]*)(.*)/
136
+ unless a =~ /class ([,<>a-zA-Z\.\d_:]*) ?:?([<>a-zA-Z\.\:, \d_]*)(.*)/
136
137
  raise "cannot parse class #{a}"
137
138
  end
138
139
  name = $1
@@ -192,6 +192,8 @@ module Rbind
192
192
  end
193
193
 
194
194
  def wrap_call
195
+ str = overwrite_c()
196
+ return str if str
195
197
  paras = parameters.map do |arg|
196
198
  "#{"*" if (!arg.type.ptr? && !arg.type.basic_type?)}#{arg.name}#{"_" if !arg.type.basic_type?}"
197
199
  end.join(", ")
@@ -657,6 +657,13 @@ module Rbind
657
657
  GeneratorRuby.normalize_method_name(@root.cdelete_method)
658
658
  end
659
659
 
660
+ def rbind_from_native
661
+ overwrite = @root.overwrite_ruby
662
+ return overwrite if overwrite
663
+ "#{name}.new(ptr)"
664
+ end
665
+
666
+
660
667
  def add_specializing(root = @root)
661
668
  str = root.specialize_ruby.to_s
662
669
  root.each_type(false) do |t|
@@ -5,10 +5,13 @@
5
5
  {
6
6
  <%= wrap_parameters %><%= wrap_call %>
7
7
  }
8
- catch(std::exception &error){strncpy(&last_error_message[0],error.what(),255);}
9
- catch(...){strncpy(&last_error_message[0],"Unknown Exception",255);}
8
+ catch(std::exception &error){strncpy(&last_error_message[0],error.what(),254);}
9
+ catch(...){strncpy(&last_error_message[0],"Unknown Exception",254);}
10
10
  <%- if !return_type || return_type.ptr? || !return_type.basic_type? -%>
11
11
  return NULL;
12
+ <%- elsif return_type.ref? -%>
13
+ static <%= return_type.cname %> invalid;
14
+ return invalid;
12
15
  <%- elsif return_type.name != "void" -%>
13
16
  return (<%= return_type.cname %>) <%= return_type.invalid_value %>;
14
17
  <%- end -%>
@@ -8,7 +8,7 @@ void <%= cdelete_method %>(<%= cname %> *ptr)
8
8
  delete fromC(ptr);
9
9
  ptr->obj_ptr = NULL;
10
10
  }
11
- catch(std::exception &error){strncpy(&last_error_message[0],error.what(),255);}
12
- catch(...){strncpy(&last_error_message[0],"Unknown Exception",255);}
11
+ catch(std::exception &error){strncpy(&last_error_message[0],error.what(),254);}
12
+ catch(...){strncpy(&last_error_message[0],"Unknown Exception",254);}
13
13
  delete ptr;
14
14
  }
@@ -55,7 +55,7 @@ class <%= name %>
55
55
 
56
56
  # @private
57
57
  def self.rbind_from_native(ptr,context)
58
- <%= name %>.new(ptr)
58
+ <%= rbind_from_native %>
59
59
  end
60
60
 
61
61
  # @private
@@ -18,11 +18,42 @@ module Rbind
18
18
  klass.add_operation ROperation.new("size",type("size_t"))
19
19
  klass.add_operation ROperation.new("clear",type("void"))
20
20
  klass.add_operation ROperation.new("empty",type("bool"))
21
- klass.add_operation ROperation.new("operator[]",map_value_type, RParameter.new("key_type", map_key_type))
21
+ klass.add_operation ROperation.new("operator[]",map_value_type.to_ref, RParameter.new("key_type", map_key_type))
22
+ klass.add_operation ROperation.new("add",type("void"), RParameter.new("key", map_key_type),RParameter.new("value", map_value_type.to_ref.to_const))
23
+ klass.operation("add").overwrite_c do
24
+ "(*rbind_obj_)[#{map_key_type.basic_type? ? "key" : "*key_"}] = #{map_value_type.basic_type? ? "value" : "*value_"};"
25
+ end
26
+
22
27
  klass.add_operation ROperation.new("at",map_value_type, RParameter.new("key_type",map_key_type))
23
28
  klass.add_operation ROperation.new("erase",type("void"), RParameter.new("key_type",map_key_type))
29
+ klass.add_operation ROperation.new("getKeys",type("std::vector<#{map_key_type}>"))
30
+ klass.operation("getKeys").overwrite_c do
31
+ str = %{
32
+ auto keys = new std::vector<#{map_key_type}>();
33
+ std::transform(std::begin(*rbind_obj_), std::end(*rbind_obj_), std::back_inserter(*keys),
34
+ [](std::pair<#{map_key_type},#{map_value_type}> const& pair) {
35
+ return pair.first;
36
+ });
37
+ return toC(keys);
38
+ }
39
+ end
40
+ klass
41
+ end
24
42
 
25
- klass
43
+ # called from RTemplate when ruby_specialize is called for the instance
44
+ def specialize_ruby_specialization(klass)
45
+ %Q$
46
+ def to_hash
47
+ hash = Hash.new
48
+ keys = get_keys
49
+ keys.each do |k|
50
+ hash[k] = self[k]
51
+ end
52
+ hash
53
+ end
54
+ def []=(key,val)
55
+ add(key,val)
56
+ end$
26
57
  end
27
58
  end
28
59
  end
@@ -11,7 +11,12 @@ module Rbind
11
11
 
12
12
  para = Array.new
13
13
  para << RParameter.new("size",type("size_t"))
14
- para << RParameter.new("val",vector_type).default_value(vector_type.full_name+"()").to_const
14
+ if vector_type.is_a? REnum
15
+ para << RParameter.new("val",vector_type)
16
+ else
17
+ para << RParameter.new("val",vector_type).default_value(vector_type.full_name+"()").to_const
18
+ end
19
+
15
20
  klass.add_operation ROperation.new("resize",type("void"),para)
16
21
  klass.add_operation ROperation.new("size",type("size_t"))
17
22
  klass.add_operation ROperation.new("clear",type("void"))
data/rbind.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'rbind'
3
- s.version = '0.0.31'
4
- s.date = '2020-02-24'
3
+ s.version = '0.0.34'
4
+ s.date = '2022-04-20'
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.authors = ['Alexander Duda']
7
7
  s.email = ['Alexander.Duda@me.com']
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbind
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.31
4
+ version: 0.0.34
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Duda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-24 00:00:00.000000000 Z
11
+ date: 2022-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.9.0
20
17
  - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '1.9'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.9.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: 1.9.0
30
27
  - - "~>"
31
28
  - !ruby/object:Gem::Version
32
29
  version: '1.9'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.9.0
33
33
  description: Rbind is developed to automatically generate ruby bindings for OpenCV
34
34
  but is not tight to this library.This gem is still under heavy development and the
35
35
  API might change in the future.
@@ -128,7 +128,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
128
  - !ruby/object:Gem::Version
129
129
  version: 1.3.6
130
130
  requirements: []
131
- rubygems_version: 3.0.3
131
+ rubyforge_project:
132
+ rubygems_version: 2.7.6
132
133
  signing_key:
133
134
  specification_version: 4
134
135
  summary: Library for genereating automated ffi-bindings for c/c++ libraries