def _remove_entry(self, source_file, key):
        """Remove an entry from the cache.

        source_file is the name of the header and key is its corresponding
        cache key (obtained by a call to :meth:_create_cache_key ).
        The entry is removed from the index table, any referenced file
        name is released and the cache file is deleted.

        If key references a non-existing entry, the method returns
        immediately.

        :param source_file: Header file name
        :type source_file: str
        :param key: Key value for the specified header file
        :type key: hash table object
        """

        entry = self.__index.get(key)
        if entry is None:
            return

        # Release the referenced files...
        for id_, _ in entry.filesigs:
            self.__filename_rep.release_filename(id_)

        # Remove the cache entry...
        del self.__index[key]
        self.__modified_flag = True

        # Delete the corresponding cache file...
        cachefilename = self._create_cache_filename(source_file)
        try:
            os.remove(cachefilename)
        except OSError as e:
            print("Could not remove cache file (%s)" % e)