12 my $db = DBI
->connect("dbi:SQLite:$db_file", "", "", {AutoCommit
=> 0});
20 if ($text =~ /s64min/) {
22 } elsif ($text =~/s32min/) {
24 } elsif ($text =~ /s16min/) {
26 } elsif ($text =~ /s64max/) {
28 } elsif ($text =~ /s32max/) {
30 } elsif ($text =~ /s16max/) {
32 } elsif ($text =~ /u64max/) {
34 } elsif ($text =~ /u32max/) {
36 } elsif ($text =~ /u16max/) {
39 if ($text =~ /\((.*?)\)/) {
42 if (!($text =~ /^[-0123456789]/)) {
62 foreach my $tmp (@
$union) {
64 push @return_union, $tmp;
68 if ($range{max
} < $tmp->{min
}) {
69 push @return_union, \
%range;
70 push @return_union, $tmp;
72 } elsif ($range{min
} <= $tmp->{min
}) {
73 if ($range{max
} <= $tmp->{max
}) {
74 $range{max
} = $tmp->{max
};
75 push @return_union, \
%range;
78 } elsif ($range{min
} <= $tmp->{max
}) {
79 if ($range{max
} <= $tmp->{max
}) {
80 push @return_union, $tmp;
83 $range{min
} = $tmp->{min
};
86 push @return_union, $tmp;
91 push @return_union, \
%range;
94 return \
@return_union;
102 return "(" . $num . ")";
112 if ($range->{min
} == $range->{max
}) {
113 return print_num
($range->{min
});
115 return print_num
($range->{min
}) . "-" . print_num
($range->{max
});
123 my $printed_range = "";
126 foreach my $range (@
$union) {
128 $printed_range = $printed_range . ",";
131 $printed_range = $printed_range . print_range
($range);
133 my $sql = "insert into type_size values ('$type', '$printed_range');";
138 $db->do("PRAGMA cache_size = 800000");
139 $db->do("PRAGMA journal_mode = OFF");
140 $db->do("PRAGMA count_changes = OFF");
141 $db->do("PRAGMA temp_store = MEMORY");
142 $db->do("PRAGMA locking = EXCLUSIVE");
144 my ($sth, @row, $cur_type, $type, @ranges, $range_txt, %range, $min, $max, $union_array, $skip);
146 $sth = $db->prepare('select * from function_type_size order by type');
151 while (@row = $sth->fetchrow_array()) {
152 $raw_line = join ',', @row;
156 if ($cur_type ne "$type") {
157 if ($cur_type ne "" && $skip == 0) {
158 print_info
($cur_type, $union_array);
165 @ranges = split(/,/, $row[3]);
166 foreach $range_txt (@ranges) {
167 if ($range_txt =~ /(.*[^(])-(.*)/) {
168 $min = text_to_int
($1);
169 $max = text_to_int
($2);
171 $min = text_to_int
($range_txt);
174 if ($min =~ /NaN/ || $max =~ /NaN/) {
177 $union_array = add_range
($union_array, $min, $max);
181 print_info
($cur_type, $union_array);