resource_object.h Source File - ClanLib SDK
Description: resource_object.h Source File

resource_object.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27*/
28
29#pragma once
30
31#include "resource.h"
32
33namespace clan
34{
37
39 class ResourceObject
40 {
41 public:
42 ResourceObject()
43 {
44 }
45
46 template<typename Type>
47 ResourceObject(const Resource<Type> &resource)
48 : object(resource.handle())
49 {
50 }
51
52 bool is_null() const { return !object; }
53
54 template<typename Type>
55 Resource<Type> cast()
56 {
57 if (object)
58 {
59 std::shared_ptr<Resource_Impl<Type> > resource = std::dynamic_pointer_cast<Resource_Impl<Type>>(object);
60 if (!resource)
61 throw Exception("ResourceObject type mismatch");
62 return Resource<Type>(resource);
63 }
64 else
65 {
66 throw Exception("ResourceObject is null");
67 }
68 }
69
70 bool operator<(const ResourceObject &other) const { return object < other.object; }
71 bool operator<=(const ResourceObject &other) const { return object <= other.object; }
72 bool operator>(const ResourceObject &other) const { return object > other.object; }
73 bool operator>=(const ResourceObject &other) const { return object >= other.object; }
74 bool operator==(const ResourceObject &other) const { return object == other.object; }
75 bool operator!=(const ResourceObject &other) const { return object != other.object; }
76
77 private:
78 std::shared_ptr<Resource_BaseImpl> object;
79 };
80
82}
clan::Exception
Top-level exception class.
Definition exception.h:42
clan::ResourceObject
Resource proxy of any type.
Definition resource_object.h:40
clan::ResourceObject::ResourceObject
ResourceObject()
Definition resource_object.h:42
clan::ResourceObject::ResourceObject
ResourceObject(const Resource< Type > &resource)
Definition resource_object.h:47
clan::ResourceObject::is_null
bool is_null() const
Definition resource_object.h:52
clan::ResourceObject::operator>
bool operator>(const ResourceObject &other) const
Definition resource_object.h:72
clan::ResourceObject::operator<
bool operator<(const ResourceObject &other) const
Definition resource_object.h:70
clan::ResourceObject::operator>=
bool operator>=(const ResourceObject &other) const
Definition resource_object.h:73
clan::ResourceObject::operator!=
bool operator!=(const ResourceObject &other) const
Definition resource_object.h:75
clan::ResourceObject::cast
Resource< Type > cast()
Definition resource_object.h:55
clan::ResourceObject::operator==
bool operator==(const ResourceObject &other) const
Definition resource_object.h:74
clan::ResourceObject::operator<=
bool operator<=(const ResourceObject &other) const
Definition resource_object.h:71
clan::Resource
Resource proxy of a specific type.
Definition resource.h:58
clan
Definition clanapp.h:36