Mercurial > fife-parpg
annotate engine/core/util/resource/resource_ptr.h @ 404:0ef7b088b3f8
*Editor plugin removed from trunk because it belongs to the light branch
author | helios2000@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Fri, 29 Jan 2010 14:31:47 +0000 |
parents | 6e7d228def30 |
children |
rev | line source |
---|---|
150
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
1 /*************************************************************************** |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
2 * Copyright (C) 2005-2008 by the FIFE team * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
3 * http://www.fifengine.de * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
4 * This file is part of FIFE. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
5 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
6 * FIFE is free software; you can redistribute it and/or * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
7 * modify it under the terms of the GNU Lesser General Public * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
8 * License as published by the Free Software Foundation; either * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
9 * version 2.1 of the License, or (at your option) any later version. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
10 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
11 * This library is distributed in the hope that it will be useful, * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
14 * Lesser General Public License for more details. * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
15 * * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
16 * You should have received a copy of the GNU Lesser General Public * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
17 * License along with this library; if not, write to the * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
18 * Free Software Foundation, Inc., * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
20 ***************************************************************************/ |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
21 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
22 #ifndef FIFE_RESOURE_PTR_H |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
23 #define FIFE_RESOURE_PTR_H |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
24 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
25 // Standard C++ library includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
26 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
27 // 3rd party library includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
28 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
29 // FIFE includes |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
30 // These includes are split up in two parts, separated by one empty line |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
31 // First block: files included from the FIFE root src directory |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
32 // Second block: files included from the same folder |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
33 #include "resource.h" |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
34 #include "pool.h" |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
35 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
36 namespace FIFE { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
37 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
38 /** A lazy loading resource. |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
39 */ |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
40 class ResourcePtr { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
41 public: |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
42 ResourcePtr(IResource* ptr = 0) : m_ptr(ptr),m_pool(0),m_index(Pool::INVALID_ID) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
43 if( m_ptr ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
44 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
45 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
46 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
47 ResourcePtr(Pool* pool,int index) : m_ptr(0),m_pool(pool),m_index(index) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
48 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
49 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
50 ResourcePtr(const ResourcePtr& r) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
51 : m_ptr(r.m_ptr),m_pool(r.m_pool),m_index(r.m_index) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
52 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
53 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
54 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
55 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
56 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
57 ResourcePtr& operator=(const ResourcePtr& r) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
58 if( this == &r ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
59 return *this; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
60 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
61 m_ptr = r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
62 m_pool = r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
63 m_index = r.m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
64 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
65 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
66 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
67 return *this; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
68 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
69 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
70 ~ResourcePtr() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
71 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
72 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
73 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
74 IResource& operator->() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
75 load(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
76 return *m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
77 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
78 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
79 const IResource& operator->() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
80 constLoad(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
81 return *m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
82 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
83 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
84 operator bool() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
85 return isValid(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
86 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
87 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
88 bool isValid() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
89 return m_ptr || isLoadable(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
90 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
91 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
92 bool isLoadable() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
93 return m_pool && m_index != Pool::INVALID_ID; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
94 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
95 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
96 bool operator==(const ResourcePtr& r) const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
97 if( isLoadable() && r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
98 return m_index == r.m_index && m_pool == r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
99 if( !isLoadable() && !r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
100 return m_ptr == r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
101 return false; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
102 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
103 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
104 bool operator<(const ResourcePtr& r) const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
105 if( isLoadable() && r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
106 { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
107 if( m_pool == r.m_pool ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
108 return m_index < r.m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
109 return m_pool < r.m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
110 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
111 if( !isLoadable() && !r.isLoadable() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
112 return m_ptr < r.m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
113 return isLoadable() < r.isLoadable(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
114 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
115 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
116 void release() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
117 if(m_ptr) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
118 m_ptr->decRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
119 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
120 m_ptr = 0; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
121 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
122 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
123 void load() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
124 constLoad(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
125 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
126 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
127 void unload() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
128 release(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
129 if( isLoadable() ) { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
130 m_pool->release(m_index); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
131 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
132 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
133 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
134 template<class T> |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
135 T* get() { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
136 if( isValid() ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
137 load(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
138 return dynamic_cast<T*>(m_ptr); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
139 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
140 |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
141 private: |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
142 void constLoad() const { |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
143 if( m_ptr ) |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
144 return; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
145 m_ptr = &m_pool->get(m_index); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
146 m_ptr->addRef(); |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
147 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
148 mutable IResource* m_ptr; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
149 Pool* m_pool; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
150 int m_index; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
151 }; |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
152 } |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
153 #endif |
6e7d228def30
Lazy loading for animations.
phoku@33b003aa-7bff-0310-803a-e67f0ece8222
parents:
diff
changeset
|
154 |