From fccebd4724cf2265a9d63b6d5f96e3985cb40431 Mon Sep 17 00:00:00 2001 From: mhx Date: Mon, 25 Oct 2021 14:46:00 +0200 Subject: [PATCH] Fix constexpr accepts() implementation to be C++11 compliant (#452) In C++11, `constexpr` functions must not contain compound statements. This change makes the implementation of `message_packet::accepts` use a single conjunction instead of a `switch` statement. See https://gcc.godbolt.org/z/zKbsx3nY5. Co-authored-by: John Wellbelove --- .../etl/generators/message_packet_generator.h | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/include/etl/generators/message_packet_generator.h b/include/etl/generators/message_packet_generator.h index d29f5ef0..f4239fc1 100644 --- a/include/etl/generators/message_packet_generator.h +++ b/include/etl/generators/message_packet_generator.h @@ -367,16 +367,16 @@ namespace etl /*[[[cog import cog - def joined_elements(prefix, suffix, elem_fmt, joiner, elem_range, indent = None, chunk_size = 4): - if indent is None: - indent = '' - lines = [joiner.join([elem_fmt % i for i in r]) for r in [ - elem_range[i:i + chunk_size] for i in range(0, len(elem_range), chunk_size) - ]] - for ix, line in enumerate(lines): - line = (prefix if ix == 0 else indent) + line - line += suffix if ix == len(lines) - 1 else joiner.rstrip() - cog.outl(line) + def accepts_return(num_id): + cog.out(" return") + for i in range(1, num_id + 1): + cog.out(" T%d::ID == id" % i) + if i < num_id: + cog.out(" ||") + if i % 4 == 0: + cog.outl("") + cog.out(" ") + cog.outl(";") ################################################ # The first definition for all of the messages. ################################################ @@ -494,7 +494,7 @@ namespace etl cog.outl(" //**********************************************") cog.outl(" static ETL_CONSTEXPR bool accepts(etl::message_id_t id)") cog.outl(" {") - joined_elements(' return ', ';', 'T%d::ID == id', ' || ', range(1, int(Handlers) + 1), ' '*11) + accepts_return(int(Handlers)) cog.outl(" }") cog.outl("") cog.outl(" //**********************************************") @@ -721,7 +721,7 @@ namespace etl cog.outl(" //**********************************************") cog.outl(" static ETL_CONSTEXPR bool accepts(etl::message_id_t id)") cog.outl(" {") - joined_elements(' return ', ';', 'T%d::ID == id', ' || ', range(1, n + 1), ' '*11) + accepts_return(n) cog.outl(" }") cog.outl("") cog.outl(" //**********************************************")