Cogs.Core
MemoryCache.cpp
1#include "MemoryCache.h"
2
3
4Cogs::Core::TerrainProvider::MemoryCache::~MemoryCache()
5{
6}
7
8bool Cogs::Core::TerrainProvider::MemoryCache::getTile(Memory::MemoryBuffer& contents, MimeType& kind, const TileId& id)
9{
10 Cogs::LockGuard guard(mutex);
11
12 if (auto it = items.find(tileKey(id)); it != items.end()) {
13 auto& item = it->second;
14 kind = item.mimeType;
15 contents.resize(item.contents.size(), false);
16 std::memcpy(contents.data(), item.contents.data(), item.contents.size());
17 return true;
18 }
19 return false;
20}
21
22bool Cogs::Core::TerrainProvider::MemoryCache::storeTile(const Memory::MemoryBuffer& contents, MimeType kind, const TileId& id, StringView /*debugLog*/)
23{
24 if (contents.size() == 0) return true;
25
26 Cogs::LockGuard guard(mutex);
27 if (auto it = items.find(tileKey(id)); it != items.end()) {
28 auto& item = it->second;
29 item.mimeType = kind;
30 item.contents.resize(contents.size());
31 std::memcpy(item.contents.data(), contents.data(),contents.size());
32 }
33 else {
34 Item item{
35 kind,
37 };
38 item.mimeType = kind;
39 item.contents.resize(contents.size());
40 std::memcpy(item.contents.data(), contents.data(), contents.size());
41 items[tileKey(id)] = std::move(item);
42 }
43 return true;
44}