• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

超漢字アプリケーション開発用のProtocol Buffersコンパイラの開発


Commit MetaInfo

Revisão1ebc30ebe3f26f858f5b79c3f27dff3bcc418e70 (tree)
Hora2015-01-27 00:42:56
Autorornse01 <ornse01@user...>
Commiterornse01

Mensagem de Log

fix generator class structure.

Mudança Sumário

Diff

--- a/src/protobuf/cgenerator.rb
+++ b/src/protobuf/cgenerator.rb
@@ -4,8 +4,29 @@ require 'pathname'
44 module Protobuf end
55
66 class Protobuf::CGenerator
7- def self.field_to_c_type(field)
8- case field.type
7+ def self.generate_header(msg_list)
8+ msg_list = msg_list.map { |msg| Protobuf::CGenerator::Message.new msg }
9+ script = Pathname("../template.erb").expand_path(__FILE__).read()
10+
11+ erb = ERB.new(script, nil, '-');
12+ erb.result(binding)
13+ end
14+
15+ def self.generate_source
16+ end
17+end
18+
19+class Protobuf::CGenerator::Field
20+ def initialize(field_node)
21+ @field_node = field_node
22+ end
23+
24+ def name
25+ @field_node.name
26+ end
27+
28+ def to_c_type
29+ case @field_node.type
930 when :double
1031 "DOUBLE"
1132 when :float
@@ -39,24 +60,32 @@ class Protobuf::CGenerator
3960 end
4061 end
4162
42- def self.field_method_type(field)
43- if (field.rule == :required)||(field.rule == :optional)
44- if field.type == :int32
63+ def field_method_type
64+ if (@field_node.rule == :required)||(@field_node.rule == :optional)
65+ if @field_node.type == :int32
4566 return :singular_numeric
46- elsif field.type == :string
67+ elsif @field_node.type == :string
4768 return :singular_string
4869 end
49- elsif field.rule == :repeated
70+ elsif @field_node.rule == :repeated
5071 end
5172 end
73+end
5274
53- def self.generate_header(msg_list)
54- script = Pathname("../template.erb").expand_path(__FILE__).read()
75+class Protobuf::CGenerator::Message
76+ def initialize(msg_node)
77+ @msg_node = msg_node
78+ end
5579
56- erb = ERB.new(script, nil, '-');
57- erb.result(binding)
80+ def name
81+ @msg_node.name
5882 end
5983
60- def self.generate_source
84+ def each_field
85+ return to_enum(__method__) unless block_given?
86+
87+ @msg_node.each_field { |field|
88+ yield Protobuf::CGenerator::Field.new field
89+ }
6190 end
6291 end
--- a/src/protobuf/template.erb
+++ b/src/protobuf/template.erb
@@ -7,11 +7,11 @@ typedef struct <%= m.name %>_ <%= m.name %>;
77 <%- msg_list.each do |m| -%>
88 <%- m.each_field do |f| -%>
99 /* <%= m.name %>.<%= f.name %> */
10- <%- case field_method_type f -%>
10+ <%- case f.field_method_type -%>
1111 <%- when :singular_numeric -%>
1212 Bool <%= m.name %>__has_<%= f.name %>(<%= m.name %> *m);
13-<%= field_to_c_type f %> <%= m.name %>__<%= f.name %>(<%= m.name %> m*)
14-VOID <%= m.name %>__set_<%= f.name %>(<%= m.name %> *m, <%= field_to_c_type f %> value)
13+<%= f.to_c_type %> <%= m.name %>__<%= f.name %>(<%= m.name %> m*)
14+VOID <%= m.name %>__set_<%= f.name %>(<%= m.name %> *m, <%= f.to_c_type %> value)
1515 VOID <%= m.name %>__clear_<%= f.name %>(<%= m.name %> *m)
1616 <%- when :singular_string -%>
1717 Bool <%= m.name %>__has_<%= f.name %>(<%= m.name %> *m)