From 7454eab7013e276282c9bc282b149242b891b334 Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 1 Jan 2009 08:03:36 +0000 Subject: * ext/socket/mkconstants.rb: refine family_to_int. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21241 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/socket/mkconstants.rb | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) (limited to 'ext/socket/mkconstants.rb') diff --git a/ext/socket/mkconstants.rb b/ext/socket/mkconstants.rb index 64743d723b..e11c9c344a 100644 --- a/ext/socket/mkconstants.rb +++ b/ext/socket/mkconstants.rb @@ -64,6 +64,17 @@ def each_name(pat) } end +def each_names_with_len(pat) + h = {} + DEFS.each {|name, default_value| + next if pat !~ name + (h[name.length] ||= []) << name + } + h.keys.sort.each {|len| + yield h[len], len + } +end + result << ERB.new(<<'EOS', nil, '%').result(binding) static void init_constants(VALUE mConst) @@ -89,13 +100,21 @@ init_constants(VALUE mConst) static int family_to_int(char *str, int len) { -% each_name(/\A[AP]F_/) {|name| + switch (len) { +% each_names_with_len(/\A[AP]F_/) {|names, len| + case <%=len%>: +% names.each {|name| #ifdef <%=name%> -% size = name.bytesize - if (len == <%=size%> && memcmp(str, <%=c_str name%>, <%=size%>) == 0) return <%=name%>; +% size = name.bytesize + if (memcmp(str, <%=c_str name%>, <%=size%>) == 0) return <%=name%>; #endif -% } - return -1; +% } + return -1; + +% } + default: + return -1; + } } EOS -- cgit v1.2.3