configurable hash functor