void cSoundStream::CreateChunks() { DeleteChunks(); if(CalculateChunkSize() == 0) return; for(unsigned int i = m_Chunks.size(); i < EngineSettings::GetMaxQueuedSoundStreamBuffers(); ++i) { m_Chunks.push_back(new FixedArray<char>(CalculateChunkSize())); m_FreeChunks.push_back(m_Chunks.back()); } }
void FSignedArchiveReader::PrecacheChunks(TArray<FSignedArchiveReader::FReadInfo>& Chunks, int64 Length) { // Request all the chunks that are needed to complete this read int64 DataOffset; int64 DestOffset = 0; int32 FirstChunkIndex = CalculateChunkIndex(PakOffset); int64 ChunkStartOffset = CalculateChunkOffset(PakOffset, DataOffset); int32 NumChunks = (DataOffset - ChunkStartOffset + Length) / FPakInfo::MaxChunkDataSize + 1; int64 RemainingLength = Length; int64 ArchiveOffset = PakOffset; // And then try to precache 'PrecacheLength' more chunks because it's likely // we're going to try to read them next if ((NumChunks + FirstChunkIndex + PrecacheLength - 1) < ChunkCount) { NumChunks += PrecacheLength; } Chunks.Empty(NumChunks); for (int32 ChunkIndexOffset = 0; ChunkIndexOffset < NumChunks; ++ChunkIndexOffset) { ChunkStartOffset = CalculateChunkOffset(ArchiveOffset, DataOffset); int64 SizeToReadFromBuffer = RemainingLength; if (DataOffset + SizeToReadFromBuffer > ChunkStartOffset + FPakInfo::MaxChunkDataSize) { SizeToReadFromBuffer = ChunkStartOffset + FPakInfo::MaxChunkDataSize - DataOffset; } FReadInfo ChunkInfo; ChunkInfo.SourceOffset = DataOffset - ChunkStartOffset; ChunkInfo.DestOffset = DestOffset; ChunkInfo.Size = SizeToReadFromBuffer; const int32 ChunkIndex = ChunkIndexOffset + FirstChunkIndex; if (LastCachedChunk.ChunkIndex == ChunkIndex) { ChunkInfo.Request = NULL; ChunkInfo.PreCachedChunk = &LastCachedChunk; } else { const int64 ChunkSize = CalculateChunkSize(ChunkIndex); ChunkInfo.Request = &SignatureChecker->RequestChunk(ChunkIndex, ChunkStartOffset, ChunkSize); ChunkInfo.PreCachedChunk = NULL; } Chunks.Add(ChunkInfo); ArchiveOffset += SizeToReadFromBuffer; DestOffset += SizeToReadFromBuffer; RemainingLength -= SizeToReadFromBuffer; } }