diff options
| author | Alexander Gavrilov | 2012-05-03 11:47:04 +0400 |
|---|---|---|
| committer | Alexander Gavrilov | 2012-05-03 11:47:04 +0400 |
| commit | 5afe2ca0020404d46ad3de840030a7b9e186b059 (patch) | |
| tree | 7066712fd0d5cae9ea766189b788efc1c69ae9ad /library/MiscUtils.cpp | |
| parent | 28b5068382ebd406b269e6b4aeb073e7cd26503e (diff) | |
| download | dfhack-5afe2ca0020404d46ad3de840030a7b9e186b059.tar.gz dfhack-5afe2ca0020404d46ad3de840030a7b9e186b059.tar.bz2 dfhack-5afe2ca0020404d46ad3de840030a7b9e186b059.tar.xz | |
Update dfhack for specific_ref.
Diffstat (limited to 'library/MiscUtils.cpp')
| -rw-r--r-- | library/MiscUtils.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/library/MiscUtils.cpp b/library/MiscUtils.cpp index 8658788b..c0674686 100644 --- a/library/MiscUtils.cpp +++ b/library/MiscUtils.cpp @@ -26,6 +26,7 @@ distribution. #include "Export.h" #include "MiscUtils.h" #include "Error.h" +#include "Types.h" #ifndef LINUX_BUILD #include <Windows.h> @@ -124,6 +125,62 @@ std::string toLower(const std::string &str) return rv; } +df::general_ref *DFHack::findRef(std::vector<df::general_ref*> &vec, df::general_ref_type type) +{ + for (int i = vec.size()-1; i >= 0; i--) + { + df::general_ref *ref = vec[i]; + if (ref->getType() == type) + return ref; + } + + return NULL; +} + +bool DFHack::removeRef(std::vector<df::general_ref*> &vec, df::general_ref_type type, int id) +{ + for (int i = vec.size()-1; i >= 0; i--) + { + df::general_ref *ref = vec[i]; + if (ref->getType() != type || ref->getID() != id) + continue; + + vector_erase_at(vec, i); + delete ref; + return true; + } + + return false; +} + +df::specific_ref *DFHack::findRef(std::vector<df::specific_ref*> &vec, df::specific_ref_type type) +{ + for (int i = vec.size()-1; i >= 0; i--) + { + df::specific_ref *ref = vec[i]; + if (ref->type == type) + return ref; + } + + return NULL; +} + +bool DFHack::removeRef(std::vector<df::specific_ref*> &vec, df::specific_ref_type type, void *ptr) +{ + for (int i = vec.size()-1; i >= 0; i--) + { + df::specific_ref *ref = vec[i]; + if (ref->type != type || ref->object != ptr) + continue; + + vector_erase_at(vec, i); + delete ref; + return true; + } + + return false; +} + #ifdef LINUX_BUILD // Linux uint64_t GetTimeMs64() { |
