* ext/socket/mkconstants.rb: use hash for family_to_str to avoid
linear search. lenp argument removed. * ext/socket/socket.c (ipaddr): call family_to_str without lenp argument. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21268 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
270f2034a7
commit
d68b60741c
@ -1,3 +1,11 @@
|
|||||||
|
Fri Jan 2 14:59:52 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* ext/socket/mkconstants.rb: use hash for family_to_str to avoid
|
||||||
|
linear search. lenp argument removed.
|
||||||
|
|
||||||
|
* ext/socket/socket.c (ipaddr): call family_to_str without lenp
|
||||||
|
argument.
|
||||||
|
|
||||||
Fri Jan 2 14:33:12 2009 Tanaka Akira <akr@fsij.org>
|
Fri Jan 2 14:33:12 2009 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* ext/socket/mkconstants.rb (gen_int_to_name): don't compare constants
|
* ext/socket/mkconstants.rb (gen_int_to_name): don't compare constants
|
||||||
|
@ -66,6 +66,13 @@ def each_name(pat)
|
|||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def reverse_each_name(pat)
|
||||||
|
DEFS.reverse_each {|name, default_value|
|
||||||
|
next if pat !~ name
|
||||||
|
yield name
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
def each_names_with_len(pat)
|
def each_names_with_len(pat)
|
||||||
h = {}
|
h = {}
|
||||||
DEFS.each {|name, default_value|
|
DEFS.each {|name, default_value|
|
||||||
@ -95,27 +102,26 @@ ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var,
|
|||||||
}
|
}
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
def each_alias(pat)
|
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat)")
|
||||||
names = []
|
<%=hash_var%> = st_init_numtable();
|
||||||
each_name(pat) {|n|
|
% reverse_each_name(pat) {|n|
|
||||||
names << n
|
|
||||||
}
|
|
||||||
yield names
|
|
||||||
end
|
|
||||||
|
|
||||||
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name(int_var, lenp_var, pat)")
|
|
||||||
% each_name(pat) {|n|
|
|
||||||
#ifdef <%=n%>
|
#ifdef <%=n%>
|
||||||
if (<%=int_var%> == <%=n%>) {
|
st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)<%=c_str n%>);
|
||||||
if (<%=lenp_var%>) *<%=lenp_var%> = <%=n.bytesize%>;
|
|
||||||
return <%=c_str n%>;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
% }
|
% }
|
||||||
|
EOS
|
||||||
|
|
||||||
|
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name(int_var, hash_var)")
|
||||||
|
st_data_t name;
|
||||||
|
if (st_lookup(<%=hash_var%>, (st_data_t)<%=int_var%>, &name))
|
||||||
|
return (char*)name;
|
||||||
return NULL;
|
return NULL;
|
||||||
EOS
|
EOS
|
||||||
|
|
||||||
result << ERB.new(<<'EOS', nil, '%').result(binding)
|
result << ERB.new(<<'EOS', nil, '%').result(binding)
|
||||||
|
|
||||||
|
static st_table *family_to_str_hash;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_constants(VALUE mConst)
|
init_constants(VALUE mConst)
|
||||||
{
|
{
|
||||||
@ -133,8 +139,8 @@ init_constants(VALUE mConst)
|
|||||||
% if guard
|
% if guard
|
||||||
#endif
|
#endif
|
||||||
% end
|
% end
|
||||||
|
|
||||||
% }
|
% }
|
||||||
|
<%= gen_int_to_name_hash('family_to_str_hash', /\AAF_/) %>
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -186,9 +192,9 @@ udp_optname_to_int(char *str, int len, int *valp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
family_to_str(int val, int *lenp)
|
family_to_str(int val)
|
||||||
{
|
{
|
||||||
<%= gen_int_to_name("val", "lenp", /\AAF_/) %>
|
<%= gen_int_to_name("val", "family_to_str_hash") %>
|
||||||
}
|
}
|
||||||
|
|
||||||
EOS
|
EOS
|
||||||
|
@ -1063,7 +1063,7 @@ ipaddr(struct sockaddr *sockaddr, int norevlookup)
|
|||||||
char hbuf[1024], pbuf[1024];
|
char hbuf[1024], pbuf[1024];
|
||||||
char *name;
|
char *name;
|
||||||
|
|
||||||
name = family_to_str(sockaddr->sa_family, NULL);
|
name = family_to_str(sockaddr->sa_family);
|
||||||
if (name)
|
if (name)
|
||||||
family = rb_str_new2(name);
|
family = rb_str_new2(name);
|
||||||
else {
|
else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user