summaryrefslogtreecommitdiff
path: root/phash.pl
diff options
context:
space:
mode:
authorAnas Nashif <anashif@tizendev.org>2012-05-23 08:22:02 +0900
committerGerrit Code Review <gerrit2@localhost>2012-05-23 08:22:02 +0900
commitb9fae45f49f97914a89b763028f5dbf8b70a9cbc (patch)
treea76f72f9a6d751f31456309e3cfdf3022b6c5546 /phash.pl
parentecc629773ccf1eaae669dce3d2b017ed476ce911 (diff)
parentb9fad1ab2ad3bd87bff05c4688c978d582ada438 (diff)
downloadnasm-b9fae45f49f97914a89b763028f5dbf8b70a9cbc.tar.gz
nasm-b9fae45f49f97914a89b763028f5dbf8b70a9cbc.tar.bz2
nasm-b9fae45f49f97914a89b763028f5dbf8b70a9cbc.zip
Merge " Upstream version 2.08rc7"
Diffstat (limited to 'phash.pl')
-rwxr-xr-xphash.pl83
1 files changed, 83 insertions, 0 deletions
diff --git a/phash.pl b/phash.pl
new file mode 100755
index 0000000..e1071b2
--- /dev/null
+++ b/phash.pl
@@ -0,0 +1,83 @@
+#!/usr/bin/perl
+## --------------------------------------------------------------------------
+##
+## Copyright 1996-2009 the NASM Authors - All rights reserved.
+##
+## Redistribution and use in source and binary forms, with or without
+## modification, are permitted provided that the following
+## conditions are met:
+##
+## * Redistributions of source code must retain the above copyright
+## notice, this list of conditions and the following disclaimer.
+## * Redistributions in binary form must reproduce the above
+## copyright notice, this list of conditions and the following
+## disclaimer in the documentation and/or other materials provided
+## with the distribution.
+##
+## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+## CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+## INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+## DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+## LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+## OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+## EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+##
+## --------------------------------------------------------------------------
+
+#
+# Perfect Minimal Hash Generator written in Perl, which produces
+# C output.
+#
+
+require 'phash.ph';
+
+#
+# Main program
+#
+sub main() {
+ my $n;
+ my %data;
+ my @hashinfo;
+ my $x, $i;
+
+ %data = read_input();
+ @hashinfo = gen_perfect_hash(\%data);
+
+ if (!defined(@hashinfo)) {
+ die "$0: no hash found\n";
+ }
+
+ verify_hash_table(\%data, \@hashinfo);
+
+ ($n, $sv, $f1, $f2, $g) = @hashinfo;
+
+ print "static int HASHNAME_fg1[$n] =\n";
+ print "{\n";
+ for ($i = 0; $i < $n; $i++) {
+ print "\t", ${$g}[${$f1}[$i]], "\n";
+ }
+ print "};\n\n";
+
+ print "static int HASHNAME_fg2[$n] =\n";
+ print "{\n";
+ for ($i = 0; $i < $n; $i++) {
+ print "\t", ${$g}[${$f2}[$i]], "\n";
+ }
+ print "};\n\n";
+
+ print "struct p_hash HASHNAME =\n";
+ print "{\n";
+ print "\t$n\n";
+ print "\t$sv\n";
+ print "\tHASHNAME_fg1,\n";
+ print "\tHASHNAME_fg2,\n";
+ print "};\n";
+}
+
+main();