Sync with Trunk (Part I)

This commit is contained in:
karajorma committed 2010-09-20 05:49:34 +00:00
1 parent 1583b74c9d
commit 1afadaa142
315 files changed
+86509 -17111

No files matched your search

+7 -6
View File
@@ -9,13 +9,14 @@
#include "globalincs/pstypes.h"
#include "object/parseobjectdock.h"
#include "mission/missionparse.h"
#include "math/bitarray.h"
// helper prototypes
void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), bool *visited_bitstring);
void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), ubyte *visited_bitstring);
void dock_dock_docked_children_tree(p_object *objp, p_object *parent_objp);
@@ -114,10 +115,10 @@ void dock_evaluate_all_docked_objects(p_object *objp, p_dock_function_info *info
else
{
// create a bit array to mark the objects we check
bool *visited_bitstring = (bool *) malloc( Parse_objects.size() * sizeof(bool) );
ubyte *visited_bitstring = (ubyte *) malloc(calculate_num_bytes(Parse_objects.size()));
// clear it
memset(visited_bitstring, 0, Parse_objects.size() * sizeof(bool) );
memset(visited_bitstring, 0, calculate_num_bytes(Parse_objects.size()));
// start evaluating the tree
dock_evaluate_tree(objp, infop, function, visited_bitstring);
@@ -128,14 +129,14 @@ void dock_evaluate_all_docked_objects(p_object *objp, p_dock_function_info *info
}
}
void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), bool *visited_bitstring)
void dock_evaluate_tree(p_object *objp, p_dock_function_info *infop, void (*function)(p_object *, p_dock_function_info *), ubyte *visited_bitstring)
{
// make sure we haven't visited this object already
if ( visited_bitstring[ POBJ_INDEX(objp)] )
if (get_bit(visited_bitstring, POBJ_INDEX(objp)))
return;
// mark as visited
visited_bitstring[ POBJ_INDEX(objp) ] = true;
set_bit(visited_bitstring, POBJ_INDEX(objp));
// call the function for this object, and return if instructed
function(objp, infop);