Cogs.Core
ResourceProxy.h
1#pragma once
2
3#include "ResourceHandle.h"
4
5namespace Cogs
6{
7 namespace Core
8 {
9 template<typename ResourceType, typename Manager>
11 {
13
14 public:
15 ResourceProxy(Manager & owner, ResourceHandle handle, ResourceHandle proxy) : proxy(proxy), handle(handle), owner(owner) {}
16 ResourceProxy(const ResourceProxy & other) = delete;
17 ResourceProxy(ResourceProxy && other) = default;
18
19 ResourceProxy & operator=(const ResourceProxy & other) = delete;
20 ResourceProxy & operator=(ResourceProxy && other) = default;
21
22 ~ResourceProxy() { if (HandleIsValid(handle)) { owner.unlockProxy(handle, proxy); } }
23
24 ResourceType * operator->() { return proxy.resolve(); }
25 ResourceType & operator*() { return *proxy.resolve(); }
26
27 ResourceHandle getHandle() const { return handle; }
28
29 private:
30 ResourceHandle proxy;
31 ResourceHandle handle;
32 Manager & owner;
33 };
34 }
35}
bool HandleIsValid(const ResourceHandle_t< T > &handle)
Check if the given resource is valid, that is not equal to NoHandle or InvalidHandle.
Contains all Cogs related functionality.
Definition: FieldSetter.h:23
Opaque resource handle for holding references to resources.
ResourceType * resolve() const
Resolve the handle, returning a pointer to the actual resource.