ruby-changes:9729
From: akr <ko1@a...>
Date: Fri, 2 Jan 2009 17:02:54 +0900 (JST)
Subject: [ruby-changes:9729] Ruby:r21270 (trunk): * ext/socket/mkconstants.rb: refactored to gather stringizer
akr 2009-01-02 17:02:36 +0900 (Fri, 02 Jan 2009) New Revision: 21270 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21270 Log: * ext/socket/mkconstants.rb: refactored to gather stringizer description. Modified files: trunk/ChangeLog trunk/ext/socket/mkconstants.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 21269) +++ ChangeLog (revision 21270) @@ -1,3 +1,8 @@ +Fri Jan 2 17:01:51 2009 Tanaka Akira <akr@f...> + + * ext/socket/mkconstants.rb: refactored to gather stringizer + description. + Fri Jan 2 15:30:57 2009 Tanaka Akira <akr@f...> * ext/socket/mkconstants.rb: make common prefix optional. Index: ext/socket/mkconstants.rb =================================================================== --- ext/socket/mkconstants.rb (revision 21269) +++ ext/socket/mkconstants.rb (revision 21270) @@ -121,25 +121,56 @@ } EOS -ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat)") +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)") <%=hash_var%> = st_init_numtable(); % reverse_each_name(pat) {|n| #ifdef <%=n%> st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)<%=c_str n%>); #endif % } +% if prefix_pat +% reverse_each_name(pat) {|n| +% next if prefix_pat !~ n +#ifdef <%=n%> + st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)<%=c_str $'%>); +#endif +% } +% end EOS -ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name(int_var, hash_var)") +ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_func(func_name, hash_var)") +static char * +<%=func_name%>(int val) +{ st_data_t name; - if (st_lookup(<%=hash_var%>, (st_data_t)<%=int_var%>, &name)) + if (st_lookup(<%=hash_var%>, (st_data_t)val, &name)) return (char*)name; return NULL; +} EOS +STRINGIZER_DEFS = [] +def def_stringizer(func_name, pat, prefix_optional=nil) + prefix_pat = nil + if prefix_optional + if Regexp === prefix_optional + prefix_pat = prefix_optional + else + prefix_pat = /\A#{Regexp.escape prefix_optional}/ + end + end + hash_var = "#{func_name}_hash" + decl = "static st_table *#{hash_var};" + gen_hash = gen_int_to_name_hash(hash_var, pat, prefix_pat) + func = gen_int_to_name_func(func_name, hash_var) + STRINGIZER_DEFS << [decl, gen_hash, func] +end + +def_stringizer('family_to_str', /\AAF_/) + result << ERB.new(<<'EOS', nil, '%').result(binding) -static st_table *family_to_str_hash; +<%= STRINGIZER_DEFS.map {|decl, gen_hash, func| decl }.join("\n") %> static void init_constants(VALUE mConst) @@ -159,7 +190,7 @@ #endif % end % } -<%= gen_int_to_name_hash('family_to_str_hash', /\AAF_/) %> +<%= STRINGIZER_DEFS.map {|decl, gen_hash, func| gen_hash }.join("\n") %> } static int @@ -210,11 +241,7 @@ <%= gen_name_to_int("str", "len", "valp", /\AUDP_/, "UDP_") %> } -static char * -family_to_str(int val) -{ -<%= gen_int_to_name("val", "family_to_str_hash") %> -} +<%= STRINGIZER_DEFS.map {|decl, gen_hash, func| func }.join("\n") %> EOS -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/