qom: introduce object_class_get_list_sorted

Unify half a dozen copies of very similar code (the only difference being
whether comparisons were case-sensitive) and use it also in Tricore,
which did not do any sorting of CPU model names.

Backports commit 47c66009ab793241e8210b3018c77a9ce9506aa8 from qemu
This commit is contained in:
Paolo Bonzini 2018-03-17 19:16:19 -04:00 committed by Lioncash
parent 8b20dfcba5
commit 37117a74ed
No known key found for this signature in database
GPG key ID: 4E3C3CC1031BA9C7
16 changed files with 38 additions and 0 deletions

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_aarch64 #define object_class_foreach object_class_foreach_aarch64
#define object_class_foreach_tramp object_class_foreach_tramp_aarch64 #define object_class_foreach_tramp object_class_foreach_tramp_aarch64
#define object_class_get_list object_class_get_list_aarch64 #define object_class_get_list object_class_get_list_aarch64
#define object_class_get_list_sorted object_class_get_list_sorted_aarch64
#define object_class_get_list_tramp object_class_get_list_tramp_aarch64 #define object_class_get_list_tramp object_class_get_list_tramp_aarch64
#define object_class_get_parent object_class_get_parent_aarch64 #define object_class_get_parent object_class_get_parent_aarch64
#define object_deinit object_deinit_aarch64 #define object_deinit object_deinit_aarch64

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_aarch64eb #define object_class_foreach object_class_foreach_aarch64eb
#define object_class_foreach_tramp object_class_foreach_tramp_aarch64eb #define object_class_foreach_tramp object_class_foreach_tramp_aarch64eb
#define object_class_get_list object_class_get_list_aarch64eb #define object_class_get_list object_class_get_list_aarch64eb
#define object_class_get_list_sorted object_class_get_list_sorted_aarch64eb
#define object_class_get_list_tramp object_class_get_list_tramp_aarch64eb #define object_class_get_list_tramp object_class_get_list_tramp_aarch64eb
#define object_class_get_parent object_class_get_parent_aarch64eb #define object_class_get_parent object_class_get_parent_aarch64eb
#define object_deinit object_deinit_aarch64eb #define object_deinit object_deinit_aarch64eb

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_arm #define object_class_foreach object_class_foreach_arm
#define object_class_foreach_tramp object_class_foreach_tramp_arm #define object_class_foreach_tramp object_class_foreach_tramp_arm
#define object_class_get_list object_class_get_list_arm #define object_class_get_list object_class_get_list_arm
#define object_class_get_list_sorted object_class_get_list_sorted_arm
#define object_class_get_list_tramp object_class_get_list_tramp_arm #define object_class_get_list_tramp object_class_get_list_tramp_arm
#define object_class_get_parent object_class_get_parent_arm #define object_class_get_parent object_class_get_parent_arm
#define object_deinit object_deinit_arm #define object_deinit object_deinit_arm

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_armeb #define object_class_foreach object_class_foreach_armeb
#define object_class_foreach_tramp object_class_foreach_tramp_armeb #define object_class_foreach_tramp object_class_foreach_tramp_armeb
#define object_class_get_list object_class_get_list_armeb #define object_class_get_list object_class_get_list_armeb
#define object_class_get_list_sorted object_class_get_list_sorted_armeb
#define object_class_get_list_tramp object_class_get_list_tramp_armeb #define object_class_get_list_tramp object_class_get_list_tramp_armeb
#define object_class_get_parent object_class_get_parent_armeb #define object_class_get_parent object_class_get_parent_armeb
#define object_deinit object_deinit_armeb #define object_deinit object_deinit_armeb

View file

@ -1881,6 +1881,7 @@ symbols = (
'object_class_foreach', 'object_class_foreach',
'object_class_foreach_tramp', 'object_class_foreach_tramp',
'object_class_get_list', 'object_class_get_list',
'object_class_get_list_sorted',
'object_class_get_list_tramp', 'object_class_get_list_tramp',
'object_class_get_parent', 'object_class_get_parent',
'object_deinit', 'object_deinit',

View file

@ -800,6 +800,17 @@ void object_class_foreach(struct uc_struct *uc, void (*fn)(ObjectClass *klass, v
GSList *object_class_get_list(struct uc_struct *uc, const char *implements_type, GSList *object_class_get_list(struct uc_struct *uc, const char *implements_type,
bool include_abstract); bool include_abstract);
/**
* object_class_get_list_sorted:
* @implements_type: The type to filter for, including its derivatives.
* @include_abstract: Whether to include abstract classes.
*
* Returns: A singly-linked list of the classes in alphabetical
* case-insensitive order.
*/
GSList *object_class_get_list_sorted(struct uc_struct *uc, const char *implements_type,
bool include_abstract);
/** /**
* object_ref: * object_ref:
* @obj: the object * @obj: the object

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_m68k #define object_class_foreach object_class_foreach_m68k
#define object_class_foreach_tramp object_class_foreach_tramp_m68k #define object_class_foreach_tramp object_class_foreach_tramp_m68k
#define object_class_get_list object_class_get_list_m68k #define object_class_get_list object_class_get_list_m68k
#define object_class_get_list_sorted object_class_get_list_sorted_m68k
#define object_class_get_list_tramp object_class_get_list_tramp_m68k #define object_class_get_list_tramp object_class_get_list_tramp_m68k
#define object_class_get_parent object_class_get_parent_m68k #define object_class_get_parent object_class_get_parent_m68k
#define object_deinit object_deinit_m68k #define object_deinit object_deinit_m68k

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_mips #define object_class_foreach object_class_foreach_mips
#define object_class_foreach_tramp object_class_foreach_tramp_mips #define object_class_foreach_tramp object_class_foreach_tramp_mips
#define object_class_get_list object_class_get_list_mips #define object_class_get_list object_class_get_list_mips
#define object_class_get_list_sorted object_class_get_list_sorted_mips
#define object_class_get_list_tramp object_class_get_list_tramp_mips #define object_class_get_list_tramp object_class_get_list_tramp_mips
#define object_class_get_parent object_class_get_parent_mips #define object_class_get_parent object_class_get_parent_mips
#define object_deinit object_deinit_mips #define object_deinit object_deinit_mips

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_mips64 #define object_class_foreach object_class_foreach_mips64
#define object_class_foreach_tramp object_class_foreach_tramp_mips64 #define object_class_foreach_tramp object_class_foreach_tramp_mips64
#define object_class_get_list object_class_get_list_mips64 #define object_class_get_list object_class_get_list_mips64
#define object_class_get_list_sorted object_class_get_list_sorted_mips64
#define object_class_get_list_tramp object_class_get_list_tramp_mips64 #define object_class_get_list_tramp object_class_get_list_tramp_mips64
#define object_class_get_parent object_class_get_parent_mips64 #define object_class_get_parent object_class_get_parent_mips64
#define object_deinit object_deinit_mips64 #define object_deinit object_deinit_mips64

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_mips64el #define object_class_foreach object_class_foreach_mips64el
#define object_class_foreach_tramp object_class_foreach_tramp_mips64el #define object_class_foreach_tramp object_class_foreach_tramp_mips64el
#define object_class_get_list object_class_get_list_mips64el #define object_class_get_list object_class_get_list_mips64el
#define object_class_get_list_sorted object_class_get_list_sorted_mips64el
#define object_class_get_list_tramp object_class_get_list_tramp_mips64el #define object_class_get_list_tramp object_class_get_list_tramp_mips64el
#define object_class_get_parent object_class_get_parent_mips64el #define object_class_get_parent object_class_get_parent_mips64el
#define object_deinit object_deinit_mips64el #define object_deinit object_deinit_mips64el

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_mipsel #define object_class_foreach object_class_foreach_mipsel
#define object_class_foreach_tramp object_class_foreach_tramp_mipsel #define object_class_foreach_tramp object_class_foreach_tramp_mipsel
#define object_class_get_list object_class_get_list_mipsel #define object_class_get_list object_class_get_list_mipsel
#define object_class_get_list_sorted object_class_get_list_sorted_mipsel
#define object_class_get_list_tramp object_class_get_list_tramp_mipsel #define object_class_get_list_tramp object_class_get_list_tramp_mipsel
#define object_class_get_parent object_class_get_parent_mipsel #define object_class_get_parent object_class_get_parent_mipsel
#define object_deinit object_deinit_mipsel #define object_deinit object_deinit_mipsel

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_powerpc #define object_class_foreach object_class_foreach_powerpc
#define object_class_foreach_tramp object_class_foreach_tramp_powerpc #define object_class_foreach_tramp object_class_foreach_tramp_powerpc
#define object_class_get_list object_class_get_list_powerpc #define object_class_get_list object_class_get_list_powerpc
#define object_class_get_list_sorted object_class_get_list_sorted_powerpc
#define object_class_get_list_tramp object_class_get_list_tramp_powerpc #define object_class_get_list_tramp object_class_get_list_tramp_powerpc
#define object_class_get_parent object_class_get_parent_powerpc #define object_class_get_parent object_class_get_parent_powerpc
#define object_deinit object_deinit_powerpc #define object_deinit object_deinit_powerpc

View file

@ -767,6 +767,19 @@ GSList *object_class_get_list(struct uc_struct *uc, const char *implements_type,
return list; return list;
} }
static gint object_class_cmp(gconstpointer a, gconstpointer b)
{
return strcasecmp(object_class_get_name((ObjectClass *)a),
object_class_get_name((ObjectClass *)b));
}
GSList *object_class_get_list_sorted(struct uc_struct *uc, const char *implements_type,
bool include_abstract)
{
return g_slist_sort(object_class_get_list(uc, implements_type, include_abstract),
object_class_cmp);
}
void object_ref(Object *obj) void object_ref(Object *obj)
{ {
if (!obj) { if (!obj) {

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_sparc #define object_class_foreach object_class_foreach_sparc
#define object_class_foreach_tramp object_class_foreach_tramp_sparc #define object_class_foreach_tramp object_class_foreach_tramp_sparc
#define object_class_get_list object_class_get_list_sparc #define object_class_get_list object_class_get_list_sparc
#define object_class_get_list_sorted object_class_get_list_sorted_sparc
#define object_class_get_list_tramp object_class_get_list_tramp_sparc #define object_class_get_list_tramp object_class_get_list_tramp_sparc
#define object_class_get_parent object_class_get_parent_sparc #define object_class_get_parent object_class_get_parent_sparc
#define object_deinit object_deinit_sparc #define object_deinit object_deinit_sparc

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_sparc64 #define object_class_foreach object_class_foreach_sparc64
#define object_class_foreach_tramp object_class_foreach_tramp_sparc64 #define object_class_foreach_tramp object_class_foreach_tramp_sparc64
#define object_class_get_list object_class_get_list_sparc64 #define object_class_get_list object_class_get_list_sparc64
#define object_class_get_list_sorted object_class_get_list_sorted_sparc64
#define object_class_get_list_tramp object_class_get_list_tramp_sparc64 #define object_class_get_list_tramp object_class_get_list_tramp_sparc64
#define object_class_get_parent object_class_get_parent_sparc64 #define object_class_get_parent object_class_get_parent_sparc64
#define object_deinit object_deinit_sparc64 #define object_deinit object_deinit_sparc64

View file

@ -1875,6 +1875,7 @@
#define object_class_foreach object_class_foreach_x86_64 #define object_class_foreach object_class_foreach_x86_64
#define object_class_foreach_tramp object_class_foreach_tramp_x86_64 #define object_class_foreach_tramp object_class_foreach_tramp_x86_64
#define object_class_get_list object_class_get_list_x86_64 #define object_class_get_list object_class_get_list_x86_64
#define object_class_get_list_sorted object_class_get_list_sorted_x86_64
#define object_class_get_list_tramp object_class_get_list_tramp_x86_64 #define object_class_get_list_tramp object_class_get_list_tramp_x86_64
#define object_class_get_parent object_class_get_parent_x86_64 #define object_class_get_parent object_class_get_parent_x86_64
#define object_deinit object_deinit_x86_64 #define object_deinit object_deinit_x86_64