From e22300b36de1c76bb78d7b671f4ccb2bc7ebb445 Mon Sep 17 00:00:00 2001 From: Jeremy Rifkin <51220084+jeremy-rifkin@users.noreply.github.com> Date: Mon, 17 Feb 2025 21:40:39 -0600 Subject: [PATCH] Refactor to not use if constexpr --- src/symbols/dwarf/dwarf_resolver.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/symbols/dwarf/dwarf_resolver.cpp b/src/symbols/dwarf/dwarf_resolver.cpp index 43c2622..41b7715 100644 --- a/src/symbols/dwarf/dwarf_resolver.cpp +++ b/src/symbols/dwarf/dwarf_resolver.cpp @@ -39,13 +39,6 @@ namespace libdwarf { constexpr bool dump_dwarf = false; constexpr bool trace_dwarf = false; - struct cu_entry { - die_object die; - Dwarf_Half dwversion; - Dwarf_Addr low; - Dwarf_Addr high; - }; - // sorted range entries for dies template class die_cache { @@ -101,10 +94,23 @@ namespace libdwarf { std::size_t ranges_count() const { return range_entries.size(); } + struct die_and_data { const die_object& die; const T& data; }; + template + auto make_lookup_result(typename std::vector::const_iterator vec_it) const + -> typename std::enable_if::value, Ret>::type + { + return dies.at(vec_it->die.die_index); + } + template + auto make_lookup_result(typename std::vector::const_iterator vec_it) const + -> typename std::enable_if::value, Ret>::type + { + return die_and_data{dies.at(vec_it->die.die_index), vec_it->data}; + } using lookup_result = typename std::conditional< std::is_same::value, const die_object&, @@ -122,11 +128,8 @@ namespace libdwarf { if(vec_it == range_entries.end()) { return nullopt; } - if constexpr(std::is_same::value) { - return dies.at(vec_it->die.die_index); - } else { - return die_and_data{dies.at(vec_it->die.die_index), vec_it->data}; - } + // This would be an if constexpr if only C++17... + return make_lookup_result(vec_it); } };