/* 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);
}
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++)
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')
if (query != 'y')
{
/* Free the "who" array */
+ /* TODO */
C_KILL(who, max_r_idx, IDX);
return;
/* 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);
}
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++)
/* 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;
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++)
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)
{
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++)
/* 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);
/* 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);
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 */
* @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)
{
* @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)
{
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++)
}
}
- /* 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 ***/
#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,
* 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;
}
/* 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);
}
* 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"
*
-
-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);
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++)
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
}
/* 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++)
/* 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;
}
}
- /* 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);
}
/*