diff options
| author | Alexander Gavrilov | 2012-04-29 21:07:39 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-04-29 21:07:39 +0400 |
| commit | 2303a25bdefab30bea67f32d27d35e5002448e8a (patch) | |
| tree | d5f8ac14a823a504ad64ae30cc0fa2515f410485 /library/DataDefs.cpp | |
| parent | 9c94b7c1e748743309dae75ec95e374f26624d5f (diff) | |
| download | dfhack-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.cpp | 13 |
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()) |
