RetroLinker
Linker for several 8-bit, 16-bit and 32-bit formats
Loading...
Searching...
No Matches
resource.h
1#ifndef RESOURCE_H
2#define RESOURCE_H
3
4#include <memory>
5#include "value.h"
6
7namespace Runtime
8{
9 class Resource
10 {
11 public:
12 virtual ~Resource() = default;
13 virtual Value GetProperties() const = 0;
14 };
15
17 {
18 public:
19 virtual ~ResourceIterator() = default;
20 virtual void Step() const = 0;
21 virtual std::shared_ptr<const Resource> Get() const = 0;
22 std::shared_ptr<Resource> Get()
23 {
24 return std::const_pointer_cast<Resource>(const_cast<const ResourceIterator *>(this)->Get());
25 }
26 virtual bool SameAs(const ResourceIterator * other) const = 0;
27 virtual void Erase() = 0;
28 };
29
31 {
32 public:
33 struct Iterator
34 {
35 std::shared_ptr<ResourceIterator> iterator_object;
36
37 std::shared_ptr<Resource> operator *()
38 {
39 return iterator_object->Get();
40 }
41
42 Iterator& operator ++()
43 {
44 iterator_object->Step();
45 return *this;
46 }
47
48 bool operator !=(const Iterator& other) const
49 {
50 return !iterator_object->SameAs(other.iterator_object.get());
51 }
52 };
53
55 {
56 std::shared_ptr<const ResourceIterator> iterator_object;
57
58 std::shared_ptr<const Resource> operator *()
59 {
60 return iterator_object->Get();
61 }
62
63 ConstIterator& operator ++()
64 {
65 iterator_object->Step();
66 return *this;
67 }
68
69 bool operator !=(const ConstIterator& other) const
70 {
71 return !iterator_object->SameAs(other.iterator_object.get());
72 }
73 };
74
75 virtual std::shared_ptr<ResourceIterator> BeginIteration() = 0;
76 std::shared_ptr<const ResourceIterator> BeginIteration() const
77 {
78 return std::const_pointer_cast<const ResourceIterator>(const_cast<ResourceIterable *>(this)->BeginIteration());
79 }
80 virtual std::shared_ptr<ResourceIterator> EndOfIteration() = 0;
81 std::shared_ptr<const ResourceIterator> EndOfIteration() const
82 {
83 return std::const_pointer_cast<const ResourceIterator>(const_cast<ResourceIterable *>(this)->EndOfIteration());
84 }
85
86 ConstIterator begin() const
87 {
88 return ConstIterator{BeginIteration()};
89 }
90
91 ConstIterator end() const
92 {
93 return ConstIterator{EndOfIteration()};
94 }
95
96 Iterator begin()
97 {
98 return Iterator{BeginIteration()};
99 }
100
101 Iterator end()
102 {
103 return Iterator{EndOfIteration()};
104 }
105 };
106
108 {
109 public:
110 virtual ~ResourceManager() = default;
111
112 virtual ResourceIterable& Iterate() = 0;
113 const ResourceIterable& Iterate() const
114 {
115 return const_cast<const ResourceIterable&>(const_cast<ResourceManager *>(this)->Iterate());
116 }
117
118 virtual std::shared_ptr<ResourceIterator> FindResource(const Value& value) = 0;
119 std::shared_ptr<const ResourceIterator> FindResource(const Value& value) const
120 {
121 return std::const_pointer_cast<const ResourceIterator>(const_cast<ResourceManager *>(this)->FindResource(value));
122 }
123
124 virtual bool UpdateResource(std::shared_ptr<Resource> resource) = 0;
125 };
126}
127
128#endif /* RESOURCE_H */
Definition resource.h:31
Definition resource.h:17
Definition resource.h:108
Definition resource.h:10
A YAML/JSON-like data format.
Definition value.h:16
Definition resource.h:34