OSDN Git Service

[Refactor] #37353 Delete ang_sort_comp, ang_sort_swap, global variable.
authordeskull <deskull@users.sourceforge.jp>
Wed, 20 Mar 2019 14:06:44 +0000 (23:06 +0900)
committerdeskull <deskull@users.sourceforge.jp>
Wed, 20 Mar 2019 14:06:44 +0000 (23:06 +0900)
12 files changed:
src/bldg.c
src/cmd-activate.c
src/cmd-item.c
src/cmd-pet.c
src/cmd4.c
src/files.c
src/rooms-pitnest.c
src/save.c
src/sort.c
src/sort.h
src/wizard1.c
src/xtra2.c

index 0d95d56..bb98d0c 100644 (file)
@@ -3876,12 +3876,7 @@ static bool research_mon(void)
        /* Sort if needed */
        if (why)
        {
-               /* Select the sort method */
-               ang_sort_comp = ang_sort_comp_hook;
-               ang_sort_swap = ang_sort_swap_hook;
-
-               /* Sort the array */
-               ang_sort(who, &why, n);
+               ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
        }
 
 
index f707e7a..7e42524 100644 (file)
@@ -434,11 +434,7 @@ void do_cmd_activate_aux(INVENTORY_IDX item)
                                  who[max_pet++] = pet_ctr;
                        }
 
-                       /* Select the sort method */
-                       ang_sort_comp = ang_sort_comp_pet;
-                       ang_sort_swap = ang_sort_swap_hook;
-
-                       ang_sort(who, &dummy_why, max_pet);
+                       ang_sort(who, &dummy_why, max_pet, ang_sort_comp_pet, ang_sort_swap_hook);
 
                        /* Process the monsters (backwards) */
                        for (i = 0; i < max_pet; i++)
index 82aa664..509c644 100644 (file)
@@ -1392,12 +1392,8 @@ void do_cmd_query_symbol(void)
 
        why = 2;
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        /* Sort by kills (and level) */
        if (query == 'k')
@@ -1410,6 +1406,7 @@ void do_cmd_query_symbol(void)
        if (query != 'y')
        {
                /* Free the "who" array */
+               /* TODO */
                C_KILL(who, max_r_idx, IDX);
 
                return;
@@ -1418,12 +1415,7 @@ void do_cmd_query_symbol(void)
        /* Sort if needed */
        if (why == 4)
        {
-               /* Select the sort method */
-               ang_sort_comp = ang_sort_comp_hook;
-               ang_sort_swap = ang_sort_swap_hook;
-
-               /* Sort the array */
-               ang_sort(who, &why, n);
+               ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
        }
 
 
index f1458fb..4020418 100644 (file)
@@ -145,11 +145,7 @@ void do_cmd_pet_dismiss(void)
                        who[max_pet++] = pet_ctr;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_pet_dismiss;
-       ang_sort_swap = ang_sort_swap_hook;
-
-       ang_sort(who, &dummy_why, max_pet);
+       ang_sort(who, &dummy_why, max_pet, ang_sort_comp_pet_dismiss, ang_sort_swap_hook);
 
        /* Process the monsters (backwards) */
        for (i = 0; i < max_pet; i++)
index 5bf3024..7037d25 100644 (file)
@@ -4187,12 +4187,7 @@ static IDX collect_monsters(IDX grp_cur, IDX mon_idx[], BIT_FLAGS8 mode)
        /* Terminate the list */
        mon_idx[mon_cnt] = -1;
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_monster_level;
-       ang_sort_swap = ang_sort_swap_hook;
-
-       /* Sort by monster level */
-       ang_sort(mon_idx, &dummy_why, mon_cnt);
+       ang_sort(mon_idx, &dummy_why, mon_cnt, ang_sort_comp_monster_level, ang_sort_swap_hook);
 
        /* Return the number of races */
        return mon_cnt;
@@ -5202,12 +5197,7 @@ static void do_cmd_knowledge_artifacts(void)
                if (okay[k]) who[n++] = k;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_art_comp;
-       ang_sort_swap = ang_sort_art_swap;
-
-       /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_art_comp, ang_sort_art_swap);
 
        /* Scan the artifacts */
        for (k = 0; k < n; k++)
@@ -5329,12 +5319,8 @@ static void do_cmd_knowledge_uniques(void)
                who[n++] = i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        if (n_alive_surface)
        {
@@ -5833,12 +5819,8 @@ static void do_cmd_knowledge_kill_count(void)
                if (r_ptr->name) who[n++] = i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        /* Scan the monster races */
        for (k = 0; k < n; k++)
@@ -7866,9 +7848,7 @@ static void do_cmd_knowledge_quests(void)
 
        /* Sort by compete level */
        for (i = 1; i < max_q_idx; i++) quest_num[i] = i;
-       ang_sort_comp = ang_sort_comp_quest_num;
-       ang_sort_swap = ang_sort_swap_quest_num;
-       ang_sort(quest_num, &dummy, max_q_idx);
+       ang_sort(quest_num, &dummy, max_q_idx, ang_sort_comp_quest_num, ang_sort_swap_quest_num);
 
        /* Dump Quest Information */
        do_cmd_knowledge_quests_current(fff);
index 6e72c14..3a75f50 100644 (file)
@@ -4444,9 +4444,7 @@ static void dump_aux_quest(FILE *fff)
 
        /* Sort by compete level */
        for (i = 1; i < max_q_idx; i++) quest_num[i] = i;
-       ang_sort_comp = ang_sort_comp_quest_num;
-       ang_sort_swap = ang_sort_swap_quest_num;
-       ang_sort(quest_num, &dummy, max_q_idx);
+       ang_sort(quest_num, &dummy, max_q_idx, ang_sort_comp_quest_num, ang_sort_swap_quest_num);
 
        /* Dump Quest Information */
        fputc('\n', fff);
@@ -4706,13 +4704,8 @@ static void dump_aux_monsters(FILE *fff)
                fprintf(fff, "You have defeated %ld %s including %ld unique monster%s in total.\n", norm_total, norm_total == 1 ? "enemy" : "enemies", uniq_total, (uniq_total == 1 ? "" : "s"));
 #endif
 
-
-               /* Select the sort method */
-               ang_sort_comp = ang_sort_comp_hook;
-               ang_sort_swap = ang_sort_swap_hook;
-
                /* Sort the array by dungeon depth of monsters */
-               ang_sort(who, &why, uniq_total);
+               ang_sort(who, &why, uniq_total, ang_sort_comp_hook, ang_sort_swap_hook);
                fprintf(fff, _("\n《上位%ld体のユニーク・モンスター》\n", "\n< Unique monsters top %ld >\n"), MIN(uniq_total, 10));
 
                /* Print top 10 */
index ff5d1c4..c8bedc6 100644 (file)
@@ -164,6 +164,7 @@ static concptr pit_subtype_string(int type, bool nest)
 *  @param v 未使用
 *  @param a 比較対象参照ID1
 *  @param b 比較対象参照ID2
+*  TODO: to sort.c
 */
 static bool ang_sort_comp_nest_mon_info(vptr u, vptr v, int a, int b)
 {
@@ -204,6 +205,7 @@ static bool ang_sort_comp_nest_mon_info(vptr u, vptr v, int a, int b)
 * @param v 未使用
 * @param a スワップ対象参照ID1
 * @param b スワップ対象参照ID2
+* TODO: to sort.c
 */
 static void ang_sort_swap_nest_mon_info(vptr u, vptr v, int a, int b)
 {
@@ -428,9 +430,7 @@ bool build_type5(void)
 
        if (cheat_room)
        {
-               ang_sort_comp = ang_sort_comp_nest_mon_info;
-               ang_sort_swap = ang_sort_swap_nest_mon_info;
-               ang_sort(nest_mon_info, NULL, NUM_NEST_MON_TYPE);
+               ang_sort(nest_mon_info, NULL, NUM_NEST_MON_TYPE, ang_sort_comp_nest_mon_info, ang_sort_swap_nest_mon_info);
 
                /* Dump the entries (prevent multi-printing) */
                for (i = 0; i < NUM_NEST_MON_TYPE; i++)
index b81e3bd..f855825 100644 (file)
@@ -970,13 +970,8 @@ static void wr_saved_floor(saved_floor_type *sf_ptr)
                }
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_cave_temp;
-       ang_sort_swap = ang_sort_swap_cave_temp;
-
        /* Sort by occurrence */
-       ang_sort(templates, &dummy_why, num_temp);
-
+       ang_sort(templates, &dummy_why, num_temp, ang_sort_comp_cave_temp, ang_sort_swap_cave_temp);
 
        /*** Dump templates ***/
 
index 532e968..45a8a36 100644 (file)
@@ -2,18 +2,6 @@
 #include "sort.h"
 
 /*
- * Current "comp" function for ang_sort()
- */
-bool(*ang_sort_comp)(vptr u, vptr v, int a, int b);
-
-
-/*
- * Current "swap" function for ang_sort()
- */
-void(*ang_sort_swap)(vptr u, vptr v, int a, int b);
-
-
-/*
  * Angband sorting algorithm -- quick sort in place
  *
  * Note that the details of the data we are sorting is hidden,
@@ -21,7 +9,8 @@ void(*ang_sort_swap)(vptr u, vptr v, int a, int b);
  * function hooks to interact with the data, which is given as
  * two pointers, and which may have any user-defined form.
  */
-void ang_sort_aux(vptr u, vptr v, int p, int q)
+void ang_sort_aux(vptr u, vptr v, int p, int q,
+       bool(*ang_sort_comp)(vptr u, vptr v, int a, int b), void(*ang_sort_swap)(vptr u, vptr v, int a, int b))
 {
        int z, a, b;
 
@@ -55,10 +44,10 @@ void ang_sort_aux(vptr u, vptr v, int p, int q)
        }
 
        /* Recurse left side */
-       ang_sort_aux(u, v, p, b);
+       ang_sort_aux(u, v, p, b, ang_sort_comp, ang_sort_swap);
 
        /* Recurse right side */
-       ang_sort_aux(u, v, b + 1, q);
+       ang_sort_aux(u, v, b + 1, q, ang_sort_comp, ang_sort_swap);
 }
 
 
@@ -70,14 +59,14 @@ void ang_sort_aux(vptr u, vptr v, int p, int q)
  * function hooks to interact with the data, which is given as
  * two pointers, and which may have any user-defined form.
  */
-void ang_sort(vptr u, vptr v, int n)
+void ang_sort(vptr u, vptr v, int n,
+       bool(*ang_sort_comp)(vptr u, vptr v, int a, int b) , void(*ang_sort_swap)(vptr u, vptr v, int a, int b))
 {
        /* Sort the array */
-       ang_sort_aux(u, v, 0, n - 1);
+       ang_sort_aux(u, v, 0, n - 1, ang_sort_comp, ang_sort_swap);
 }
 
 
-
 /*
  * Sorting hook -- comp function -- by "distance to player"
  *
index 473aa5e..c0287d8 100644 (file)
@@ -1,9 +1,5 @@
-
-extern bool(*ang_sort_comp)(vptr u, vptr v, int a, int b);
-extern void(*ang_sort_swap)(vptr u, vptr v, int a, int b);
-
-extern void ang_sort_aux(vptr u, vptr v, int p, int q);
-extern void ang_sort(vptr u, vptr v, int n);
+extern void ang_sort_aux(vptr u, vptr v, int p, int q, bool(*ang_sort_comp)(vptr u, vptr v, int a, int b), void(*ang_sort_swap)(vptr u, vptr v, int a, int b));
+extern void ang_sort(vptr u, vptr v, int n, bool(*ang_sort_comp)(vptr u, vptr v, int a, int b), void(*ang_sort_swap)(vptr u, vptr v, int a, int b));
 
 extern bool ang_sort_comp_distance(vptr u, vptr v, int a, int b);
 extern bool ang_sort_comp_importance(vptr u, vptr v, int a, int b);
index 092297b..4708322 100644 (file)
@@ -1719,12 +1719,8 @@ static void spoil_mon_desc(concptr fname)
                if (r_ptr->name) who[n++] = (s16b)i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
        /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        /* Scan again */
        for (i = 0; i < n; i++)
@@ -2055,13 +2051,7 @@ static void spoil_mon_info(concptr fname)
                if (r_ptr->name) who[n++] = (s16b)i;
        }
 
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_hook;
-       ang_sort_swap = ang_sort_swap_hook;
-
-       /* Sort the array by dungeon depth of monsters */
-       ang_sort(who, &why, n);
-
+       ang_sort(who, &why, n, ang_sort_comp_hook, ang_sort_swap_hook);
 
        /*
         * List all monsters in order
@@ -2307,13 +2297,7 @@ static void spoil_mon_evol(concptr fname)
        }
 
        /* Step 3: Sort the evolution trees */
-
-       /* Select the sort method */
-       ang_sort_comp = ang_sort_comp_evol_tree;
-       ang_sort_swap = ang_sort_swap_evol_tree;
-
-       /* Sort the array */
-       ang_sort(evol_tree, NULL, max_r_idx);
+       ang_sort(evol_tree, NULL, max_r_idx, ang_sort_comp_evol_tree, ang_sort_swap_evol_tree);
 
        /* Step 4: Print the evolution trees */
        for (i = 0; i < max_r_idx; i++)
index 637c8c4..e09e2f5 100644 (file)
@@ -402,20 +402,13 @@ static void target_set_prepare(BIT_FLAGS mode)
        /* Set the sort hooks */
        if (mode & (TARGET_KILL))
        {
-               /* Target the nearest monster for shooting */
-               ang_sort_comp = ang_sort_comp_distance;
-               ang_sort_swap = ang_sort_swap_distance;
+               ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_distance, ang_sort_swap_distance);
        }
        else
        {
-               /* Look important grids first in Look command */
-               ang_sort_comp = ang_sort_comp_importance;
-               ang_sort_swap = ang_sort_swap_distance;
+               ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_importance, ang_sort_swap_distance);
        }
 
-       /* Sort the positions */
-       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n);
-
        if (p_ptr->riding && target_pet && (tmp_pos.n > 1) && (mode & (TARGET_KILL)))
        {
                POSITION tmp;
@@ -1983,12 +1976,8 @@ static void tgt_pt_prepare(void)
                }
        }
 
-       /* Target the nearest monster for shooting */
-       ang_sort_comp = ang_sort_comp_distance;
-       ang_sort_swap = ang_sort_swap_distance;
-
        /* Sort the positions */
-       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n);
+       ang_sort(tmp_pos.x, tmp_pos.y, tmp_pos.n, ang_sort_comp_distance, ang_sort_swap_distance);
 }
 
 /*