cauterize 0.0.1.pre12 → 0.0.1.pre13

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.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +6 -0
  3. data/example/Cauterize +0 -2
  4. data/lib/cauterize/builders/c/buildable.rb +7 -0
  5. data/lib/cauterize/builders/c/builtin.rb +4 -0
  6. data/lib/cauterize/builders/c/composite.rb +8 -0
  7. data/lib/cauterize/builders/c/enumeration.rb +8 -4
  8. data/lib/cauterize/builders/c/fixed_array.rb +11 -2
  9. data/lib/cauterize/builders/c/group.rb +26 -1
  10. data/lib/cauterize/builders/c/scalar.rb +4 -0
  11. data/lib/cauterize/builders/c/variable_array.rb +17 -3
  12. data/lib/cauterize/builders/cs/builtin.rb +1 -1
  13. data/lib/cauterize/builders/cs/fixed_array.rb +3 -1
  14. data/lib/cauterize/builders/ruby/builtin.rb +1 -1
  15. data/lib/cauterize/builders/ruby/composite.rb +10 -7
  16. data/lib/cauterize/builders/ruby/enumeration.rb +9 -9
  17. data/lib/cauterize/builders/ruby/fixed_array.rb +4 -4
  18. data/lib/cauterize/builders/ruby/group.rb +9 -9
  19. data/lib/cauterize/builders/ruby/scalar.rb +3 -3
  20. data/lib/cauterize/builders/ruby/variable_array.rb +5 -5
  21. data/lib/cauterize/c_builder.rb +6 -0
  22. data/lib/cauterize/enumeration.rb +4 -14
  23. data/lib/cauterize/representation.rb +32 -0
  24. data/lib/cauterize/ruby_builder.rb +7 -5
  25. data/lib/cauterize/variable_array.rb +3 -12
  26. data/lib/cauterize/version.rb +1 -1
  27. data/spec/base_type_spec.rb +2 -2
  28. data/spec/builders/c/group_spec.rb +21 -0
  29. data/spec/builders/c/variable_array_spec.rb +2 -4
  30. data/spec/builders/cs/fixed_array_spec.rb +2 -1
  31. data/spec/builders/cs/variable_array_spec.rb +0 -1
  32. data/spec/c_builder_spec.rb +22 -2
  33. data/spec/cs_builder_spec.rb +0 -2
  34. data/spec/doc_builder_spec.rb +0 -2
  35. data/spec/ruby_builder_spec.rb +5 -2
  36. data/spec/ruby_generated_spec.rb +735 -0
  37. data/spec/support/spec_sample_model.rb +1 -3
  38. data/spec/variable_array_spec.rb +5 -19
  39. data/support/cs/src/CauterizeFixedArrayFormatter.cs +27 -9
  40. data/support/cs/src/CauterizeVariableArrayFormatter.cs +28 -11
  41. data/support/ruby/src/cauterize_ruby_baseclasses.rb +297 -176
  42. data/support/ruby/src/cauterize_ruby_builtins.rb +121 -95
  43. metadata +25 -39
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8dc3160a85139642df941d4afd5e3e7bbac2b32b
4
+ data.tar.gz: 827cf33e36a85a7acf94e0c92418e4a5ece5b419
5
+ SHA512:
6
+ metadata.gz: 6f4311c1ca2b228a9cad06b595756f57e40327fdba18664b8419770c91e7f2b1fd95aa1cb0a7b94e66b7f8007d1cbd2aeea19a41209197ece8bf7da8c082b9dd
7
+ data.tar.gz: c32033d4dfd4575cc11ff4dda714211df2cbf46b552903a69659278b90f8ee049bf3f2ef4191da363f4664f2e115a8aa4dd143a401c2017b34233c19cd8edfd7
data/.gitignore CHANGED
@@ -25,3 +25,9 @@ example/*_cauterize_output
25
25
 
26
26
  # Nunit test results
27
27
  TestResult.xml
28
+
29
+ # rbenv
30
+ .ruby-version
31
+
32
+ # Tags
33
+ tags
data/example/Cauterize CHANGED
@@ -5,7 +5,6 @@ scalar(:bigint) { |t| t.type_name(:int32) }
5
5
  scalar(:usmallint) { |t| t.type_name(:uint8) }
6
6
 
7
7
  variable_array(:uint8_buffer) do |a|
8
- a.size_type :uint8
9
8
  a.array_type :uint8
10
9
  a.array_size 128
11
10
  end
@@ -37,7 +36,6 @@ fixed_array(:color_list_list) do |a|
37
36
  end
38
37
 
39
38
  variable_array(:numbers) do |a|
40
- a.size_type :usmallint
41
39
  a.array_type :bigint
42
40
  a.array_size 128
43
41
  end
@@ -57,6 +57,12 @@ module Cauterize
57
57
  end
58
58
  end
59
59
 
60
+ # This is the symbol used to define the maximum encoded length of any type
61
+ ##########################################################################
62
+ def max_enc_len_cpp_sym
63
+ "MAX_ENCODED_LENGTH_#{@blueprint.name}"
64
+ end
65
+
60
66
  # Things below here are tested in shared_examples_for_c_buildables #
61
67
  ####################################################################
62
68
 
@@ -74,6 +80,7 @@ module Cauterize
74
80
  end
75
81
 
76
82
  # These are only different in a few type varieties.
83
+ def preprocessor_defines(formatter); nil end
77
84
  def typedef_decl(formatter); nil end
78
85
  def struct_proto(formatter); nil end
79
86
  def struct_defn(formatter); nil end
@@ -17,6 +17,10 @@ module Cauterize
17
17
  formatter << "#{render} #{sym};"
18
18
  end
19
19
 
20
+ def preprocessor_defines(formatter)
21
+ formatter << "#define #{max_enc_len_cpp_sym} sizeof(#{render_ctype})"
22
+ end
23
+
20
24
  # These are identical to the Scalar definitions. For now.
21
25
  def packer_defn(formatter)
22
26
  formatter << "return CauterizeAppend(dst, (uint8_t*)src, sizeof(*src));"
@@ -10,6 +10,14 @@ module Cauterize
10
10
  formatter << "#{render} #{sym};"
11
11
  end
12
12
 
13
+ def preprocessor_defines(formatter)
14
+ field_lens = @blueprint.fields.values.map do |field|
15
+ Builders.get(:c, field.type).max_enc_len_cpp_sym
16
+ end
17
+
18
+ formatter << "#define #{max_enc_len_cpp_sym} (#{field_lens.join(" + ")})"
19
+ end
20
+
13
21
  def packer_defn(formatter)
14
22
  formatter << "CAUTERIZE_STATUS_T err;"
15
23
  @blueprint.fields.values.each do |field|
@@ -10,9 +10,11 @@ module Cauterize
10
10
  formatter << "#{render} #{sym};"
11
11
  end
12
12
 
13
- def packer_defn(formatter)
14
- rep_builder = Builders.get(:c, @blueprint.representation)
13
+ def preprocessor_defines(formatter)
14
+ formatter << "#define #{max_enc_len_cpp_sym} (#{rep_builder.max_enc_len_cpp_sym})"
15
+ end
15
16
 
17
+ def packer_defn(formatter)
16
18
  rep = "enum_representation"
17
19
  rep_builder.declare(formatter, rep)
18
20
 
@@ -21,8 +23,6 @@ module Cauterize
21
23
  end
22
24
 
23
25
  def unpacker_defn(formatter)
24
- rep_builder = Builders.get(:c, @blueprint.representation)
25
-
26
26
  rep = "enum_representation"
27
27
  rep_builder.declare(formatter, rep)
28
28
 
@@ -48,6 +48,10 @@ module Cauterize
48
48
  end
49
49
  formatter.append(";")
50
50
  end
51
+
52
+ private
53
+
54
+ def rep_builder; Builders.get(:c, @blueprint.representation) end
51
55
  end
52
56
  end
53
57
  end
@@ -10,13 +10,18 @@ module Cauterize
10
10
  formatter << "#{render} #{sym};"
11
11
  end
12
12
 
13
+ def preprocessor_defines(formatter)
14
+ formatter << "#define #{length_sym} (#{@blueprint.array_size})"
15
+ formatter << "#define #{max_enc_len_cpp_sym} (#{length_sym} * #{ty_bldr.max_enc_len_cpp_sym})"
16
+ end
17
+
13
18
  def packer_defn(formatter)
14
19
  formatter << "CAUTERIZE_STATUS_T err;"
15
20
  formatter << "size_t i;"
16
21
  formatter.blank_line
17
22
 
18
23
  # store each used item in the array
19
- formatter << "for (i = 0; i < #{@blueprint.array_size}; i++)"
24
+ formatter << "for (i = 0; i < #{length_sym}; i++)"
20
25
  formatter.braces do
21
26
  formatter << "if (CA_OK != (err = #{ty_bldr.packer_sym}(dst, &src->data[i]))) { return err; }"
22
27
  end
@@ -31,7 +36,7 @@ module Cauterize
31
36
  formatter.blank_line
32
37
 
33
38
  # store each used item in the array
34
- formatter << "for (i = 0; i < #{@blueprint.array_size}; i++)"
39
+ formatter << "for (i = 0; i < #{length_sym}; i++)"
35
40
  formatter.braces do
36
41
  formatter << "if (CA_OK != (err = #{ty_bldr.unpacker_sym}(src, &dst->data[i]))) { return err; }"
37
42
  end
@@ -54,6 +59,10 @@ module Cauterize
54
59
 
55
60
  private
56
61
 
62
+ def length_sym
63
+ "FIXED_ARRAY_LENGTH_#{@blueprint.name}"
64
+ end
65
+
57
66
  def ty_bldr
58
67
  @ty_bldr ||= Builders.get(:c, @blueprint.array_type)
59
68
  end
@@ -1,6 +1,16 @@
1
1
  module Cauterize
2
2
  module Builders
3
3
  module C
4
+ class Maxer
5
+ # Produce a preprocessor string that results in the maximum size of the passed
6
+ # in symbols. Uses the CA_MAX macro from the Cauterize support C files.
7
+ def self.max_str(*syms)
8
+ a = syms.to_a
9
+ pre = syms.to_a.inject("") {|s, v| s + "CA_MAX(" + v.to_s + ", "}
10
+ return pre + "0" + (")" * a.length)
11
+ end
12
+ end
13
+
4
14
  class Group < Buildable
5
15
  def initialize(blueprint)
6
16
  super(blueprint)
@@ -15,8 +25,21 @@ module Cauterize
15
25
  formatter << "#{render} #{sym};"
16
26
  end
17
27
 
28
+ def preprocessor_defines(formatter)
29
+ field_lens = @blueprint.fields.values.map do |field|
30
+ if field.type.nil?
31
+ nil
32
+ else
33
+ Builders.get(:c, field.type).max_enc_len_cpp_sym
34
+ end
35
+ end.compact
36
+
37
+ formatter << ["#define #{max_enc_len_cpp_sym}",
38
+ "(#{enum_builder.max_enc_len_cpp_sym} +",
39
+ Maxer.max_str(*field_lens)].join(" ") + ")"
40
+ end
41
+
18
42
  def packer_defn(formatter)
19
- enum_builder = Builders.get(:c, @tag_enum)
20
43
  formatter << "CAUTERIZE_STATUS_T err;"
21
44
 
22
45
  # pack the tag
@@ -110,6 +133,8 @@ module Cauterize
110
133
  formatter << "break;"
111
134
  end
112
135
  end
136
+
137
+ def enum_builder; Builders.get(:c, @tag_enum) end
113
138
  end
114
139
  end
115
140
  end
@@ -15,6 +15,10 @@ module Cauterize
15
15
  formatter << "#{render} #{sym};"
16
16
  end
17
17
 
18
+ def preprocessor_defines(formatter)
19
+ formatter << "#define #{max_enc_len_cpp_sym} sizeof(#{render})"
20
+ end
21
+
18
22
  def packer_defn(formatter)
19
23
  formatter << "return CauterizeAppend(dst, (uint8_t*)src, sizeof(*src));"
20
24
  end
@@ -10,10 +10,15 @@ module Cauterize
10
10
  formatter << "#{render} #{sym};"
11
11
  end
12
12
 
13
- def packer_defn(formatter)
14
- size_type_builder = Builders.get(:c, @blueprint.size_type)
15
- array_type_builder = Builders.get(:c, @blueprint.array_type)
13
+ def preprocessor_defines(formatter)
14
+ formatter << "#define #{length_sym} (#{@blueprint.array_size})"
15
+ formatter << [
16
+ "#define #{max_enc_len_cpp_sym} (",
17
+ "#{size_type_builder.max_enc_len_cpp_sym} + ",
18
+ "(#{length_sym} * #{array_type_builder.max_enc_len_cpp_sym}))"].join
19
+ end
16
20
 
21
+ def packer_defn(formatter)
17
22
  formatter << "CAUTERIZE_STATUS_T err;"
18
23
  formatter << "size_t i;"
19
24
  formatter.blank_line
@@ -76,6 +81,15 @@ module Cauterize
76
81
  end
77
82
  formatter.append(";")
78
83
  end
84
+
85
+ private
86
+
87
+ def length_sym
88
+ "VARIABLE_ARRAY_MAX_LENGTH_#{@blueprint.name}"
89
+ end
90
+
91
+ def size_type_builder; Builders.get(:c, @blueprint.size_type) end
92
+ def array_type_builder; Builders.get(:c, @blueprint.array_type) end
79
93
  end
80
94
  end
81
95
  end
@@ -3,7 +3,7 @@ module Cauterize::Builders::CS
3
3
  @@CS_TYPE_MAPPING = {
4
4
  1 => {signed: "SByte", unsigned: "Byte", :float => nil, :bool => "bool"},
5
5
  2 => {signed: "Int16", unsigned: "UInt16", :float => nil, :bool => nil},
6
- 4 => {signed: "Int32", unsigned: "UInt32", :float => "Float", :bool => nil},
6
+ 4 => {signed: "Int32", unsigned: "UInt32", :float => "Single", :bool => nil},
7
7
  8 => {signed: "Int64", unsigned: "UInt64", :float => "Double", :bool => nil},
8
8
  }
9
9
 
@@ -10,9 +10,11 @@ module Cauterize::Builders::CS
10
10
  end
11
11
 
12
12
  def size_defn(formatter)
13
+ formatter << "public static int MySize = #{size};"
14
+ formatter.blank_line
13
15
  formatter << "protected override int Size"
14
16
  formatter.braces do
15
- formatter << "get { return #{size}; }"
17
+ formatter << "get { return MySize; }"
16
18
  end
17
19
  end
18
20
 
@@ -8,7 +8,7 @@ module Cauterize::Builders::Ruby
8
8
  }
9
9
 
10
10
  def render
11
- render_rbtype
11
+ "CauterizeRuby::#{render_rbtype}"
12
12
  end
13
13
 
14
14
  def class_defn(f)
@@ -5,16 +5,19 @@ module Cauterize::Builders::Ruby
5
5
  end
6
6
 
7
7
  def class_defn(f)
8
- f << "class #{render} < CauterizeComposite"
9
- f << " def self.fields"
10
- f << " {"
11
- @blueprint.fields.values.each_with_index do |field, i|
8
+ f << " class #{render} < CauterizeRuby::Composite"
9
+ @blueprint.fields.values.each do |field|
10
+ f << " def #{field.name}() fields[:#{field.name}] end"
11
+ end
12
+ f << " def self.fields"
13
+ f << " {"
14
+ @blueprint.fields.values.each do |field|
12
15
  t = Cauterize::Builders.get(:ruby, field.type).render
13
- f << " #{field.name}: #{t},"
16
+ f << " #{field.name}: #{t},"
14
17
  end
15
- f << " }"
18
+ f << " }"
19
+ f << " end"
16
20
  f << " end"
17
- f << "end"
18
21
  f << ""
19
22
  end
20
23
  end
@@ -6,19 +6,19 @@ module Cauterize::Builders::Ruby
6
6
 
7
7
  def class_defn(f)
8
8
  rep_builder = Cauterize::Builders.get(:ruby, @blueprint.representation)
9
- f << "class #{render} < CauterizeEnumeration"
10
- f << " def self.repr_type() #{rep_builder.render} end"
11
- f << " def self.fields"
12
- f << " {"
9
+ f << " class #{render} < CauterizeRuby::Enumeration"
10
+ f << " def self.repr_type() #{rep_builder.render} end"
11
+ f << " def self.fields"
12
+ f << " {"
13
13
  @blueprint.values.values.each do |v|
14
- f << " #{v.name.to_s.upcase}: #{v.value},"
14
+ f << " #{v.name.to_s.upcase}: #{v.value},"
15
15
  end
16
- f << " }"
17
- f << " end"
16
+ f << " }"
17
+ f << " end"
18
18
  @blueprint.values.values.each do |v|
19
- f << " #{v.name.to_s.upcase} = #{render}.new(:#{v.name.to_s.upcase})"
19
+ f << " #{v.name.to_s.upcase} = #{render}.new(:#{v.name.to_s.upcase})"
20
20
  end
21
- f << "end"
21
+ f << " end"
22
22
  f << ""
23
23
  end
24
24
  end
@@ -7,10 +7,10 @@ module Cauterize::Builders::Ruby
7
7
  def class_defn(f)
8
8
  array_type_bldr = Cauterize::Builders.get(:ruby, @blueprint.array_type)
9
9
  x = <<EOF
10
- class #{render} < CauterizeFixedArray
11
- def self.length () #{@blueprint.array_size} end
12
- def self.elem_type() #{array_type_bldr.render} end
13
- end
10
+ class #{render} < CauterizeRuby::FixedArray
11
+ def self.length () #{@blueprint.array_size} end
12
+ def self.elem_type() #{array_type_bldr.render} end
13
+ end
14
14
  EOF
15
15
  f << x
16
16
  end
@@ -11,22 +11,22 @@ module Cauterize::Builders::Ruby
11
11
  def class_defn(f)
12
12
  tag = Cauterize::Builders.get(:ruby, @tag_enum).render
13
13
 
14
- f << "class #{render} < CauterizeGroup"
15
- f << " def self.tag_type() #{tag} end"
16
- f << " def self.tag_prefix() '#{@blueprint.tag_enum.name.upcase}_' end"
17
- f << " def self.fields"
18
- f << " {"
14
+ f << " class #{render} < CauterizeRuby::Group"
15
+ f << " def self.tag_type() #{tag} end"
16
+ f << " def self.tag_prefix() '#{@blueprint.tag_enum.name.upcase}_' end"
17
+ f << " def self.fields"
18
+ f << " {"
19
19
  @blueprint.fields.values.each_with_index do |field, i|
20
20
  if field.type
21
21
  t = Cauterize::Builders.get(:ruby, field.type).render
22
- f << " #{field.name.to_s.upcase}: #{t},"
22
+ f << " #{field.name.to_s.upcase}: #{t},"
23
23
  else
24
- f << " #{field.name.to_s.upcase}: nil,"
24
+ f << " #{field.name.to_s.upcase}: nil,"
25
25
  end
26
26
  end
27
- f << " }"
27
+ f << " }"
28
+ f << " end"
28
29
  f << " end"
29
- f << "end"
30
30
  f << ""
31
31
  end
32
32
  end
@@ -7,9 +7,9 @@ module Cauterize::Builders::Ruby
7
7
  def class_defn(f)
8
8
  tn_bldr = Cauterize::Builders.get(:ruby, @blueprint.type_name)
9
9
  x = <<EOF
10
- class #{render} < CauterizeScalar
11
- def self.builtin() #{tn_bldr.render} end
12
- end
10
+ class #{render} < CauterizeRuby::Scalar
11
+ def self.builtin() #{tn_bldr.render} end
12
+ end
13
13
  EOF
14
14
  f << x
15
15
  end
@@ -8,11 +8,11 @@ module Cauterize::Builders::Ruby
8
8
  array_type_bldr = Cauterize::Builders.get(:ruby, @blueprint.array_type)
9
9
  size_type_bldr = Cauterize::Builders.get(:ruby, @blueprint.size_type)
10
10
  x = <<EOF
11
- class #{render} < CauterizeVariableArray
12
- def self.size_type () #{size_type_bldr.render} end
13
- def self.max_length () #{@blueprint.array_size} end
14
- def self.elem_type() #{array_type_bldr.render} end
15
- end
11
+ class #{render} < CauterizeRuby::VariableArray
12
+ def self.size_type () #{size_type_bldr.render} end
13
+ def self.max_length () #{@blueprint.array_size} end
14
+ def self.elem_type() #{array_type_bldr.render} end
15
+ end
16
16
  EOF
17
17
  f << x
18
18
  end
@@ -40,10 +40,16 @@ module Cauterize
40
40
  instances = BaseType.all_instances
41
41
  builders = instances.map {|i| Builders.get(:c, i)}
42
42
 
43
+ builders.each { |b| b.preprocessor_defines(f) }
44
+ f.blank_line
43
45
  builders.each { |b| b.typedef_decl(f) }
46
+ f.blank_line
44
47
  builders.each { |b| b.enum_defn(f) }
48
+ f.blank_line
45
49
  builders.each { |b| b.struct_proto(f) }
50
+ f.blank_line
46
51
  builders.each { |b| b.struct_defn(f) }
52
+ f.blank_line
47
53
 
48
54
  f << "#ifdef __cplusplus"
49
55
  f << "extern \"C\" {"