tree_position tree_find( CHAR_DATA *target, search_tree tree )
{
if ( tree == NULL )
return NULL;
bug("tree_find: found %s", tree->hatedata->target_char->name );
if ( target < tree->hatedata->target_char )
return tree_find( target, tree->left );
else if ( target > tree->hatedata->target_char )
return tree_find( target, tree->right );
else
return tree;
}
HATE_DATA *tree_retrieve( tree_position pos )
{
return pos->hatedata;
}
if( ( P = tree_find( ch, victim->hatedata )) == NULL || tree_retrieve( P )->target_char != ch )
if( ( P = tree_find( ch, victim->hatedata )) == NULL || tree_retrieve( P )->target_char != ch )
if ( ( P = tree_find ( ch, victim->hatedata ) ) == NULL || P->hatedata->target_char != ch )
/* Hate System test -Zeno */
if ( IS_NPC(victim) )
{
HATE_DATA *hatedata;
tree_position P;
bug( "list of hate…");
tree_find( NULL, victim->hatedata );
bug( "————–");
if( ( P = tree_find( ch, victim->hatedata )) == NULL || tree_retrieve( P )->target_char != ch )
{
int test;
hatedata = (HATE_DATA * ) malloc( sizeof( HATE_DATA ) );
//victim->hatedata = tree_make_empty( NULL );
hatedata->target_char = ch;
test = number_range( 1, 50 );
hatedata->hate_amount = test;
victim->hatedata = tree_insert( hatedata, victim->hatedata );
ch_printf( ch, "It should now hate you for %d.\n\r", test );
}
else
{
hatedata = tree_retrieve(tree_find( ch, victim->hatedata ));
ch_printf(ch, "You are already hated for %d!\n\r", hatedata->hate_amount );
}
}
search_tree tree_insert( HATE_DATA *hatedata, search_tree tree )
{
if ( tree == NULL )
{
tree = (HATE_NODE * ) malloc( sizeof( HATE_NODE ) );
if ( tree == NULL )
bug( "tree_insert: out of space!" );
else
{
tree->hatedata = hatedata;
tree->left = tree->right = NULL;
bug( "tree_insert: inserted" );
}
}
else if ( hatedata->target_char < tree->hatedata->target_char )
tree->left = tree_insert( hatedata, tree->left );
else if ( hatedata->target_char > tree->hatedata->target_char )
tree->left = tree_insert( hatedata, tree->right );
bug( "tree_insert: already exists.");
return tree;
}
else if ( hatedata->target_char < tree->hatedata->target_char )
tree->left = tree_insert( hatedata, tree->left );
else if ( hatedata->target_char > tree->hatedata->target_char )
tree->left = tree_insert( hatedata, tree->right );
You don't need to, but again, it's much more efficient. Indexing them is constant, vs. linear for comparisons, and this time it actually matters, since the number of entries is likely to be in the tens of thousands.
I'm afraid that I don't understand how this replies to my comment. Would you mind explaining that?