regen/mph.pl: Add comments blead
authorKarl Williamson <khw@cpan.org>
Sat, 21 Jul 2018 03:34:16 +0000 (21:34 -0600)
committerKarl Williamson <khw@cpan.org>
Sat, 21 Jul 2018 03:57:59 +0000 (21:57 -0600)
These are from http://nntp.perl.org/group/perl.perl5.porters/251395

regen/mph.pl
uni_keywords.h

index 5ed392a..11af009 100644 (file)
@@ -10,6 +10,28 @@ my $DEBUG= 0;
 my $RSHIFT= 8;
 my $FNV_CONST= 16777619;
 
+# The basic idea is that you have a two level structure, and effectively
+# hash the key twice.
+#
+# The first hash finds a bucket in the array which contains a seed which
+# is used for the second hash, which then leads to a bucket with key
+# data which is compared against to determine if the key is a match.
+#
+# If the first hash finds no seed, then the key cannot match.
+#
+# In our case we cheat a bit, and hash the key only once, but use the
+# low bits for the first lookup and the high-bits for the second.
+#
+# So for instance:
+#
+#           h= (h >> RSHIFT) ^ s;
+#
+# is how the second hash is computed. We right shift the original hash
+# value  and then xor in the seed2, which will be non-zero.
+#
+# That then gives us the bucket which contains the key data we need to
+# match for a valid key.
+
 sub _fnv {
     my ($key, $seed)= @_;
     my $hash = 0+$seed;
index 6267636..d892cd0 100644 (file)
@@ -6995,5 +6995,5 @@ MPH_VALt match_uniprop( const unsigned char * const key, const U16 key_len ) {
  * 4bb677187a1a64e39d48f2e341b5ecb6c99857e49d7a79cf503bd8a3c709999b regen/charset_translations.pl
  * 03e51b0f07beebd5da62ab943899aa4934eee1f792fa27c1fb638c33bf4ac6ea regen/mk_PL_charclass.pl
  * 470114e8c4c31ef2fab379513abde81f63493344f4fd246da89ad4fd9c8bd8ae regen/mk_invlists.pl
- * 1adf61210fe457d9fe2e953f9646cac257b1c00226a84435d9c2642051b81024 regen/mph.pl
+ * c42c035b18a0426443184e9f889aa2b16bef5a9add9805cd853c4e2a783712ff regen/mph.pl
  * ex: set ro: */