summaryrefslogtreecommitdiff
path: root/library/MiscUtils.cpp
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-05-03 11:47:04 +0400
committerAlexander Gavrilov2012-05-03 11:47:04 +0400
commit5afe2ca0020404d46ad3de840030a7b9e186b059 (patch)
tree7066712fd0d5cae9ea766189b788efc1c69ae9ad /library/MiscUtils.cpp
parent28b5068382ebd406b269e6b4aeb073e7cd26503e (diff)
downloaddfhack-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.cpp57
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()
{