docs: def read_index_iter(self):
          """Generator function that reads the file index from the vpk file
  
          yeilds (file_path, metadata)
          """
  
          with fopen(self.vpk_path, 'rb') as f:
              f.seek(self.header_length)
  
              while True:
                  if self.version > 0 and f.tell() > self.tree_length + self.header_length:
                      raise ValueError("Error parsing index (out of bounds)")
  
                  ext = _read_cstring(f)
                  if ext == '':
                      break
  
                  while True:
                      path = _read_cstring(f)
                      if path == '':
                          break
                      if path != ' ':
                          path = os.path.join(path, '')
                      else:
                          path = ''
  
                      while True:
                          name = _read_cstring(f)
                          if name == '':
                              break
  
                          (crc32,
                           preload_length,
                           archive_index,
                           archive_offset,
                           file_length,
                           suffix,
                           ) = metadata = list(struct.unpack("IHHIIH", f.read(18)))
  
                          if suffix != 0xffff:
                              raise ValueError("Error while parsing index")
  
                          if archive_index == 0x7fff:
                              metadata[3] = self.header_length + self.tree_length + archive_offset
  
                          metadata = (f.read(preload_length),) + tuple(metadata[:-1])
  
                          yield path + name + '.' + ext, metadata