From ead3e6317af191324d9044400152e9c881fc3126 Mon Sep 17 00:00:00 2001 From: Xiaole He Date: Sun, 16 Oct 2022 06:47:03 +0000 Subject: [PATCH 2/3] abg-reader: optimize if construction In 'build_enum_type_decl' function of 'src/abg-reader.cc', the 'for loop' walk through all the child nodes of the '' for seeking '' and '': /* original src/abg-reader.cc begin */ static enum_type_decl_sptr build_enum_type_decl(read_context& ctxt, const xmlNodePtr node, bool add_to_current_scope) { ... for (xmlNodePtr n = xmlFirstElementChild(node); n; n = xmlNextElementSibling(n)) { if (xmlStrEqual(n->name, BAD_CAST("underlying-type"))) { ... } if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { ... } } ... } /* original src/abg-reader.cc end */ Here uses 2 separate 'if' statements for seeking, that is, for any child node of the '', there involves 2 'if' comparations. Because the child node of the '' is either '' or '', there would be a slight optimization when use 'if-else if' construction instead, like below: /* optimized src/abg-reader.cc begin */ for (xmlNodePtr n = xmlFirstElementChild(node); n; n = xmlNextElementSibling(n)) { if (xmlStrEqual(n->name, BAD_CAST("underlying-type"))) { ... } else if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { ... } } /* optimized src/abg-reader.cc end */ Supposing there has the test case: /* test case begin */ /* test case end */ When parsing the '' xml tag, for the original 'src/abg-reader.cc', there involves 2 'if' comparations. But involves only 1 'if' comparation for the optimized 'src/abg-reader.cc'. Signed-off-by: Xiaole He Tested-by: Xiaole He Signed-off-by: Dodji Seketeli --- src/abg-reader.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/abg-reader.cc b/src/abg-reader.cc index 1df3515..ebb55e9 100644 --- a/src/abg-reader.cc +++ b/src/abg-reader.cc @@ -4356,8 +4356,7 @@ build_enum_type_decl(read_context& ctxt, base_type_id = CHAR_STR(a); continue; } - - if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) + else if (xmlStrEqual(n->name, BAD_CAST("enumerator"))) { string name; int64_t value = 0; -- 2.27.0