If my math is correct, I can quickly create a new hash value to concatenate the two lines, if I already have separate hash values for each line. But only if the hash function has the form:
hash(n) = k * hash(n-1) + c(n), and h(0) = 0.
In this case
hash( concat(s1,s2) ) = k**length(s2) * hash(s1) + hash(s2)
eg.
h1 = makeHash32_SDBM( "abcdef", 6 );
h2 = makeHash32_SDBM( "ghijklmn", 8 );
h12 = makeHash32_SDBM( "abcdefghijklmn", 14 );
hx = mod32_powI( 65599, 8 ) * h1 + h2;
h1 = 2534611139
h2 = 2107082500
h12 = 1695963591
hx = 1695963591
Note that h12 = hx so this demonstrates the idea.
Now for SDBM hash k=65599. While it DJB hashhas k=33(or perhaps 31?) And h(0) = 5381, therefore, to make it work, you can install it instead h(0) = 0.
But modification on DJB hashuses xorinstead +to add each character.
http://www.cse.yorku.ca/~oz/hash.html
Is there another way to quickly calculate the hash value of concatenated strings if the hash function uses xorinstead +?