From 1a5bce53a7e339aa96017a193c160f48a759cab0 Mon Sep 17 00:00:00 2001 From: doomchild Date: Mon, 20 Sep 2010 12:39:50 -0500 Subject: [PATCH] added ReadGeology --- library/include/dfhack-c/modules/Maps_C.h | 2 ++ library/modules/Maps_C.cpp | 42 +++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/library/include/dfhack-c/modules/Maps_C.h b/library/include/dfhack-c/modules/Maps_C.h index fdbfdf1be..3199fc3af 100644 --- a/library/include/dfhack-c/modules/Maps_C.h +++ b/library/include/dfhack-c/modules/Maps_C.h @@ -36,6 +36,8 @@ extern "C" { DFHACK_EXPORT int Maps_Start(DFHackObject* maps); DFHACK_EXPORT int Maps_Finish(DFHackObject* maps); +DFHACK_EXPORT uint16_t* Maps_ReadGeology(DFHackObject* maps); + DFHACK_EXPORT t_feature* Maps_ReadGlobalFeatures(DFHackObject* maps); DFHACK_EXPORT void Maps_getSize(DFHackObject* maps, uint32_t* x, uint32_t* y, uint32_t* z); diff --git a/library/modules/Maps_C.cpp b/library/modules/Maps_C.cpp index 911f4e0f9..9aacf8a0b 100644 --- a/library/modules/Maps_C.cpp +++ b/library/modules/Maps_C.cpp @@ -54,6 +54,48 @@ int Maps_Finish(DFHackObject* maps) return -1; } +uint16_t* Maps_ReadGeology(DFHackObject* maps) +{ + if(maps != NULL) + { + std::vector < std::vector > geology; + + if(((DFHack::Maps*)maps)->ReadGeology(geology)) + { + uint16_t* buf; + uint32_t geoLength = 0; + + for(int i = 0; i < geology.size(); i++) + { + for(int j = 0; j < geology[i].size(); j++) + { + geoLength += geology[i].size(); + } + } + + (*alloc_ushort_buffer_callback)(buf, geoLength); + + if(buf != NULL) + { + uint16_t* bufCopyPtr = buf; + + for(int i = 0; i < geology.size(); i++) + { + copy(geology[i].begin(), geology[i].end(), bufCopyPtr); + + bufCopyPtr += geology[i].size(); + } + + return buf; + } + else + return NULL; + } + } + + return NULL; +} + t_feature* Maps_ReadGlobalFeatures(DFHackObject* maps) { if(maps != NULL)