1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
/* This file is part of the Spring engine (GPL v2 or later), see LICENSE.html */
#include "BufferedArchive.h"
#include <cassert>
CBufferedArchive::CBufferedArchive(const std::string& name, bool cache): IArchive(name)
{
caching = cache;
}
bool CBufferedArchive::GetFile(unsigned int fid, std::vector<std::uint8_t>& buffer)
{
std::lock_guard<spring::mutex> lck(archiveLock);
assert(IsFileId(fid));
if (!caching)
return GetFileImpl(fid, buffer);
if (fid >= cache.size())
cache.resize(std::max(size_t(fid + 1), cache.size() * 2));
if (!cache[fid].populated) {
cache[fid].exists = GetFileImpl(fid, cache[fid].data);
cache[fid].populated = true;
}
buffer = cache[fid].data;
return cache[fid].exists;
}
|