summaryrefslogtreecommitdiff
path: root/library/DataDefs.cpp
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-04-29 21:07:39 +0400
committerAlexander Gavrilov2012-04-29 21:07:39 +0400
commit2303a25bdefab30bea67f32d27d35e5002448e8a (patch)
treed5f8ac14a823a504ad64ae30cc0fa2515f410485 /library/DataDefs.cpp
parent9c94b7c1e748743309dae75ec95e374f26624d5f (diff)
downloaddfhack-2303a25bdefab30bea67f32d27d35e5002448e8a.tar.gz
dfhack-2303a25bdefab30bea67f32d27d35e5002448e8a.tar.bz2
dfhack-2303a25bdefab30bea67f32d27d35e5002448e8a.tar.xz
Implement unconstructed building instance creation and linking into world.
For more flexibility, the base api is split into 3 phases: alloc, setSize, and construct. No support for non-actual buildings like stockpiles and activity zones at the moment.
Diffstat (limited to 'library/DataDefs.cpp')
-rw-r--r--library/DataDefs.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/library/DataDefs.cpp b/library/DataDefs.cpp
index 061110ec..7f0bacc9 100644
--- a/library/DataDefs.cpp
+++ b/library/DataDefs.cpp
@@ -232,15 +232,26 @@ void virtual_identity::doInit(Core *core)
known[vtable_ptr] = this;
}
+virtual_identity *virtual_identity::find(const std::string &name)
+{
+ auto name_it = name_lookup.find(name);
+
+ return (name_it != name_lookup.end()) ? name_it->second : NULL;
+}
+
virtual_identity *virtual_identity::get(virtual_ptr instance_ptr)
{
if (!instance_ptr) return NULL;
+ return find(get_vtable(instance_ptr));
+}
+
+virtual_identity *virtual_identity::find(void *vtable)
+{
// Actually, a reader/writer lock would be sufficient,
// since the table is only written once per class.
tthread::lock_guard<tthread::mutex> lock(*known_mutex);
- void *vtable = get_vtable(instance_ptr);
std::map<void*, virtual_identity*>::iterator it = known.find(vtable);
if (it != known.end())