summaryrefslogtreecommitdiff
path: root/library/Types.cpp
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-05-05 21:07:18 +0400
committerAlexander Gavrilov2012-05-05 21:07:18 +0400
commit3bd44e5367e6f51b4fb7af854068c67b6f73bb4a (patch)
tree3e79e7c613d96fb6f04a154eb43636eec74f7be5 /library/Types.cpp
parent81f2240c237253a7a2264c1b9682a291337667b0 (diff)
downloaddfhack-3bd44e5367e6f51b4fb7af854068c67b6f73bb4a.tar.gz
dfhack-3bd44e5367e6f51b4fb7af854068c67b6f73bb4a.tar.bz2
dfhack-3bd44e5367e6f51b4fb7af854068c67b6f73bb4a.tar.xz
Move some things that won't work in dfhack-client to a separate file.
Diffstat (limited to 'library/Types.cpp')
-rw-r--r--library/Types.cpp129
1 files changed, 129 insertions, 0 deletions
diff --git a/library/Types.cpp b/library/Types.cpp
new file mode 100644
index 00000000..72f8bdb8
--- /dev/null
+++ b/library/Types.cpp
@@ -0,0 +1,129 @@
+/*
+https://github.com/peterix/dfhack
+Copyright (c) 2009-2011 Petr Mrázek (peterix@gmail.com)
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any
+damages arising from the use of this software.
+
+Permission is granted to anyone to use this software for any
+purpose, including commercial applications, and to alter it and
+redistribute it freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must
+not claim that you wrote the original software. If you use this
+software in a product, an acknowledgment in the product documentation
+would be appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and
+must not be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source
+distribution.
+*/
+
+#include "Internal.h"
+#include "Export.h"
+#include "MiscUtils.h"
+#include "Error.h"
+#include "Types.h"
+
+#ifndef LINUX_BUILD
+ #include <Windows.h>
+ #include "wdirent.h"
+#else
+ #include <sys/time.h>
+ #include <ctime>
+ #include <dirent.h>
+ #include <errno.h>
+#endif
+
+#include <ctype.h>
+#include <stdarg.h>
+
+#include <sstream>
+#include <map>
+
+
+int DFHack::getdir(std::string dir, std::vector<std::string> &files)
+{
+ DIR *dp;
+ struct dirent *dirp;
+ if((dp = opendir(dir.c_str())) == NULL)
+ {
+ return errno;
+ }
+ while ((dirp = readdir(dp)) != NULL) {
+ files.push_back(std::string(dirp->d_name));
+ }
+ closedir(dp);
+ return 0;
+}
+
+bool DFHack::hasEnding (std::string const &fullString, std::string const &ending)
+{
+ if (fullString.length() > ending.length())
+ {
+ return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));
+ }
+ else
+ {
+ return false;
+ }
+}
+
+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;
+}