[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]