|  |  |  | @ -24,6 +24,7 @@ distribution. | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | #include "dfhack/DFPragma.h" | 
		
	
		
			
				|  |  |  |  | #include <vector> | 
		
	
		
			
				|  |  |  |  | #include <map> | 
		
	
		
			
				|  |  |  |  | #include <algorithm> | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | using namespace std; | 
		
	
	
		
			
				
					|  |  |  | @ -74,7 +75,7 @@ uint16_t* Maps_ReadGeology(DFHackObject*  maps) | 
		
	
		
			
				|  |  |  |  | 				} | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			(*alloc_ushort_buffer_callback)(buf, geoLength); | 
		
	
		
			
				|  |  |  |  | 			((*alloc_ushort_buffer_callback)(buf, geoLength)); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			if(buf != NULL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
	
		
			
				
					|  |  |  | @ -110,7 +111,7 @@ t_feature* Maps_ReadGlobalFeatures(DFHackObject* maps) | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			t_feature** buf = NULL; | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			(*alloc_feature_buffer_callback)(buf, featureVec.size()); | 
		
	
		
			
				|  |  |  |  | 			((*alloc_feature_buffer_callback)(buf, featureVec.size())); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			if(buf != NULL) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
	
		
			
				
					|  |  |  | @ -128,6 +129,54 @@ t_feature* Maps_ReadGlobalFeatures(DFHackObject* maps) | 
		
	
		
			
				|  |  |  |  | 	return NULL; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | c_featuremap_node* Maps_ReadLocalFeatures(DFHackObject* maps) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	if(maps != NULL) | 
		
	
		
			
				|  |  |  |  | 	{ | 
		
	
		
			
				|  |  |  |  | 		std::map <DFCoord, std::vector<t_feature *> > local_features; | 
		
	
		
			
				|  |  |  |  | 		std::map <DFCoord, std::vector<t_feature *> >::iterator iterate; | 
		
	
		
			
				|  |  |  |  | 		uint32_t i; | 
		
	
		
			
				|  |  |  |  | 		 | 
		
	
		
			
				|  |  |  |  | 		if(((DFHack::Maps*)maps)->ReadLocalFeatures(local_features)) | 
		
	
		
			
				|  |  |  |  | 		{ | 
		
	
		
			
				|  |  |  |  | 			if(local_features.empty() == true) | 
		
	
		
			
				|  |  |  |  | 				return NULL; | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			c_featuremap_node* featuremap;	 | 
		
	
		
			
				|  |  |  |  | 			uint32_t* featuremap_size = (uint32_t*)calloc(local_features.size(), sizeof(uint32_t)); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			for(i = 0, iterate = local_features.begin(); iterate != local_features.end(); i++, iterate++) | 
		
	
		
			
				|  |  |  |  | 				featuremap_size[i] = (*iterate).second.size(); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			((*alloc_featuremap_buffer_callback)(&featuremap, featuremap_size, local_features.size())); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			free(featuremap_size); | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			if(featuremap == NULL) | 
		
	
		
			
				|  |  |  |  | 				return NULL; | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			for(i = 0, iterate = local_features.begin(); iterate != local_features.end(); i++, iterate++) | 
		
	
		
			
				|  |  |  |  | 			{ | 
		
	
		
			
				|  |  |  |  | 				uint32_t j; | 
		
	
		
			
				|  |  |  |  | 				 | 
		
	
		
			
				|  |  |  |  | 				featuremap[i].coordinate.comparate = (*iterate).first.comparate; | 
		
	
		
			
				|  |  |  |  | 				 | 
		
	
		
			
				|  |  |  |  | 				for(j = 0; j < (*iterate).second.size(); j++) | 
		
	
		
			
				|  |  |  |  | 					featuremap[i].features[j] = *((*iterate).second[j]); | 
		
	
		
			
				|  |  |  |  | 					 | 
		
	
		
			
				|  |  |  |  | 				//copy((*iterate).second.begin(), (*iterate).second.end(), featuremap[i].features);
 | 
		
	
		
			
				|  |  |  |  | 				featuremap[i].feature_length = (*iterate).second.size(); | 
		
	
		
			
				|  |  |  |  | 			} | 
		
	
		
			
				|  |  |  |  | 			 | 
		
	
		
			
				|  |  |  |  | 			return featuremap; | 
		
	
		
			
				|  |  |  |  | 		} | 
		
	
		
			
				|  |  |  |  | 		else | 
		
	
		
			
				|  |  |  |  | 			return NULL; | 
		
	
		
			
				|  |  |  |  | 	} | 
		
	
		
			
				|  |  |  |  | 	 | 
		
	
		
			
				|  |  |  |  | 	return NULL; | 
		
	
		
			
				|  |  |  |  | } | 
		
	
		
			
				|  |  |  |  | 
 | 
		
	
		
			
				|  |  |  |  | void Maps_getSize(DFHackObject* maps, uint32_t* x, uint32_t* y, uint32_t* z) | 
		
	
		
			
				|  |  |  |  | { | 
		
	
		
			
				|  |  |  |  | 	if(maps != NULL) | 
		
	
	
		
			
				
					|  |  |  | 
 |