1e5c31af7Sopenharmony_ci#ifndef _VKSSTORE_HPP
2e5c31af7Sopenharmony_ci#define _VKSSTORE_HPP
3e5c31af7Sopenharmony_ci
4e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
5e5c31af7Sopenharmony_ci * Vulkan CTS Framework
6e5c31af7Sopenharmony_ci * --------------------
7e5c31af7Sopenharmony_ci *
8e5c31af7Sopenharmony_ci * Copyright (c) 2021 The Khronos Group Inc.
9e5c31af7Sopenharmony_ci *
10e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
11e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
12e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
13e5c31af7Sopenharmony_ci *
14e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
15e5c31af7Sopenharmony_ci *
16e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
17e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
18e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
20e5c31af7Sopenharmony_ci * limitations under the License.
21e5c31af7Sopenharmony_ci *
22e5c31af7Sopenharmony_ci *-------------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "vksCommon.hpp"
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_ci#include <mutex>
27e5c31af7Sopenharmony_ci#include <map>
28e5c31af7Sopenharmony_ci
29e5c31af7Sopenharmony_cinamespace vksc_server
30e5c31af7Sopenharmony_ci{
31e5c31af7Sopenharmony_ci
32e5c31af7Sopenharmony_cistruct Store
33e5c31af7Sopenharmony_ci{
34e5c31af7Sopenharmony_ci	bool Get (const string& path, vector<u8>& content, bool removeAfter)
35e5c31af7Sopenharmony_ci	{
36e5c31af7Sopenharmony_ci		std::lock_guard<std::mutex> lock(FileMapMutex);
37e5c31af7Sopenharmony_ci
38e5c31af7Sopenharmony_ci		auto it = FileMap.find(path);
39e5c31af7Sopenharmony_ci		if (it != FileMap.end())
40e5c31af7Sopenharmony_ci		{
41e5c31af7Sopenharmony_ci			if (removeAfter)
42e5c31af7Sopenharmony_ci			{
43e5c31af7Sopenharmony_ci				content = std::move(it->second);
44e5c31af7Sopenharmony_ci				FileMap.erase(it);
45e5c31af7Sopenharmony_ci			}
46e5c31af7Sopenharmony_ci			else
47e5c31af7Sopenharmony_ci			{
48e5c31af7Sopenharmony_ci				content = it->second;
49e5c31af7Sopenharmony_ci			}
50e5c31af7Sopenharmony_ci			return true;
51e5c31af7Sopenharmony_ci		}
52e5c31af7Sopenharmony_ci		return false;
53e5c31af7Sopenharmony_ci	}
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ci	bool Set (const string& uniqueFilename, const vector<u8>& content)
56e5c31af7Sopenharmony_ci	{
57e5c31af7Sopenharmony_ci		std::lock_guard<std::mutex> lock(FileMapMutex);
58e5c31af7Sopenharmony_ci		FileMap[uniqueFilename] = std::move(content);
59e5c31af7Sopenharmony_ci		return true;
60e5c31af7Sopenharmony_ci	}
61e5c31af7Sopenharmony_ci
62e5c31af7Sopenharmony_ciprivate:
63e5c31af7Sopenharmony_ci	std::map<string, vector<u8>> FileMap;
64e5c31af7Sopenharmony_ci	std::mutex FileMapMutex;
65e5c31af7Sopenharmony_ci};
66e5c31af7Sopenharmony_ci
67e5c31af7Sopenharmony_ci}
68e5c31af7Sopenharmony_ci
69e5c31af7Sopenharmony_ci#endif // _VKSSTORE_HPP
70