fV3 BlockFormation::getOffset(fV3 direction, size_t rank, size_t file) const { fV3 left(-direction.y, direction.x, direction.z), rank_offset(direction * (rank_middle - (rank * spacing))), file_offset(left * ((file * spacing) - file_middle)); return (rank_offset + file_offset); }
bool Archive::InitFiles() { // Create FileInfo structures from the data entries within the hogg if (fseek(file_, hogg::HOGG_DATAENTRIES_OFFSET, SEEK_SET) != 0) { perror("Failed to seek to the data entries section"); return false; } char* dataEntryData = new char[sizeof(hogg::DataEntry) * num_files_]; fread(dataEntryData, sizeof(hogg::DataEntry), num_files_, file_); hogg::DataEntry* dataEntry = (hogg::DataEntry*)dataEntryData; int i; for (i = 0; i < num_files_; i++) { auto fi = new FileInfo(this); fi->data_size(dataEntry->size_on_disk); fi->file_offset(dataEntry->file_offset); fi->last_updated(dataEntry->timestamp); file_infos_[i] = fi; dataEntry++; } delete [] dataEntryData; // Set the decompressed size of FileInfos which are compressed char* compressionData = new char[sizeof(hogg::CompressionInfo) * num_files_]; fread(compressionData, sizeof(hogg::CompressionInfo), num_files_, file_); hogg::CompressionInfo* compressionInfo = (hogg::CompressionInfo*)compressionData; for (i = 0; i < num_files_; i++) { auto fi = file_infos_[i]; fi->file_path_string_id(compressionInfo->file_path_id); fi->decompressed_size(compressionInfo->uncompressed_size); compressionInfo++; } delete [] compressionData; return true; }