'The index is capable to solve conflicts by `Separate chaining`
:param db_path: database path
:type db_path: string
:param name: index name
:type name: ascii string
:param line_format: line format, `key_format` parameter value will replace `{key}` if present.
:type line_format: string (32s{key}IIcI by default) {doc_id}{hash_key}{start}{size}{status}{next}
:param hash_lim: maximum hash functon results (remember about birthday problem) count from 0
:type hash_lim: integer
:param storage_class: Storage class by default it will open standard :py:class:`CodernityDB.storage.Storage` (if string has to be accesible by globals()[storage_class])
:type storage_class: class name which will be instance of CodernityDB.storage.Storage instance or None
:param key_format: a index key format'

def __init__(self, db_path, name, entry_line_format='<32s{key}IIcI', hash_lim=1048575, storage_class=None, key_format='c'):

    if (key_format and ('{key}' in entry_line_format)):
        entry_line_format = entry_line_format.replace('{key}', key_format)
    super(IU_HashIndex, self).__init__(db_path, name)
    self.hash_lim = hash_lim
    if (not storage_class):
        storage_class = IU_Storage
    if (storage_class and (not isinstance(storage_class, basestring))):
        storage_class = storage_class.__name__
    self.storage_class = storage_class
    self.storage = None
    self.bucket_line_format = '<I'
    self.bucket_line_size = struct.calcsize(self.bucket_line_format)
    self.entry_line_format = entry_line_format
    self.entry_line_size = struct.calcsize(self.entry_line_format)
    cache = cache1lvl(100)
    self._find_key = cache(self._find_key)
    self._locate_doc_id = cache(self._locate_doc_id)
    self.bucket_struct = struct.Struct(self.bucket_line_format)
    self.entry_struct = struct.Struct(self.entry_line_format)
    self.data_start = ((((self.hash_lim + 1) * self.bucket_line_size) + self._start_ind) + 2)
