Guest User

Untitled

a guest
Dec 14th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.47 KB | None | 0 0
  1. search_tree tree_make_empty( search_tree tree )
  2. {
  3. if ( tree != NULL )
  4. {
  5. tree_make_empty( tree->left );
  6. tree_make_empty( tree->right );
  7. free( tree );
  8. }
  9. return NULL;
  10. }
  11.  
  12. tree_position tree_find( CHAR_DATA *target, search_tree tree )
  13. {
  14. if ( tree == NULL )
  15. return NULL;
  16.  
  17. if ( target < tree->hatedata->target_char )
  18. return tree_find( target, tree->left );
  19. else if ( target > tree->hatedata->target_char )
  20. return tree_find( target, tree->right );
  21. else
  22. return tree;
  23. }
  24.  
  25. search_tree tree_insert( HATE_DATA *hatedata, search_tree tree )
  26. {
  27. if ( tree == NULL )
  28. {
  29. tree = (HATE_NODE * ) malloc( sizeof( HATE_NODE ) );
  30.  
  31. if ( tree == NULL )
  32. bug( "tree_insert: out of space!" );
  33. else
  34. {
  35. tree->hatedata = hatedata;
  36. tree->left = tree->right = NULL;
  37. }
  38. }
  39. else if ( hatedata->target_char < tree->hatedata->target_char )
  40. tree->left = tree_insert( hatedata, tree->left );
  41. else if ( hatedata->target_char > tree->hatedata->target_char )
  42. tree->right = tree_insert( hatedata, tree->right );
  43.  
  44. return tree;
  45. }
  46.  
  47. tree_position tree_find_min( search_tree tree )
  48. {
  49. if ( tree == NULL )
  50. return NULL;
  51. else if ( tree->left == NULL )
  52. return tree;
  53. else
  54. return tree_find_min( tree->left );
  55. }
  56.  
  57. search_tree tree_delete( HATE_DATA *hatedata, search_tree tree )
  58. {
  59. tree_position pos;
  60.  
  61. if ( tree == NULL )
  62. bug( "tree_delete: not found" );
  63. else if ( hatedata->target_char < tree->hatedata->target_char )
  64. tree->left = tree_delete( hatedata, tree->left );
  65. else if ( hatedata->target_char > tree->hatedata->target_char )
  66. tree->right = tree_delete( hatedata, tree->right );
  67. else if ( tree->left && tree->right )
  68. {
  69. pos = tree_find_min( tree->right );
  70. tree->hatedata = pos->hatedata;
  71. tree->right = tree_delete( tree->hatedata, tree->right );
  72. }
  73. else
  74. {
  75. pos = tree;
  76. if ( tree->left == NULL )
  77. tree = tree->right;
  78. else if ( tree->right == NULL )
  79. tree = tree->left;
  80. free( pos );
  81. }
  82.  
  83. return tree;
  84. }
  85.  
  86. HATE_DATA *tree_retrieve( tree_position pos )
  87. {
  88. return pos->hatedata;
  89. }
  90.  
  91. struct hate_data
  92. {
  93. CHAR_DATA *target_char;
  94. int hate_amount;
  95. };
  96.  
  97. struct hate_node
  98. {
  99. HATE_DATA *hatedata;
  100. search_tree left;
  101. search_tree right;
  102. };
  103.  
  104. mob->hatedata = tree_make_empty( NULL );
  105.  
  106. if ( IS_NPC(victim) )
  107. {
  108. HATE_DATA *hatedata;
  109. tree_position P;
  110.  
  111. if( ( P = tree_find( ch, victim->hatedata )) == NULL || tree_retrieve( P )->target_char != ch )
  112. {
  113. int test;
  114. hatedata = (HATE_DATA * ) malloc( sizeof( HATE_DATA ) );
  115. hatedata->target_char = ch;
  116. test = number_range( 1, 50 );
  117. hatedata->hate_amount = test;
  118. victim->hatedata = tree_insert( hatedata, victim->hatedata );
  119. ch_printf( ch, "It should now hate you for %d.nr", test );
  120. }
  121. else
  122. {
  123. hatedata = tree_retrieve(tree_find( ch, victim->hatedata ));
  124. ch_printf(ch, "You are already hated for %d!nr", hatedata->hate_amount );
  125. }
  126.  
  127. }
  128.  
  129. tree_position tree_find_min( search_tree tree )
  130. {
  131. if ( tree == NULL )
  132. return NULL;
  133. while (tree->left != NULL)
  134. tree = tree->left;
  135. return tree;
  136. }
  137.  
  138. HATE_DATA *hatedata;
  139.  
  140. /* ... */
  141.  
  142. hatedata = (HATE_DATA * ) malloc( sizeof( HATE_DATA ) );
  143.  
  144. hatedata = malloc(sizeof(*hatedata));
  145.  
  146. #define my_new(type, count) ((type*)malloc (sizeof (type) * (count)))
Add Comment
Please, Sign In to add comment