Can any one tell what is the 4th line in  this function doing!
<pre><code>size_t hash(const std::string data) {
    size_t h(0);
    for (int i=0; i&lt;data.length(); i++){
        h = (h &lt;&lt; (31-i) ^ (h &gt;&gt; i) ^ data[i]);
    }
    h = h%hashsize;
    return h;
}
</code></pre>
