mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-22 09:30:45 +00:00
The is_reversed function uses a variable length array, which isn't spec-abiding C++. Additionally, the Clang compiler doesn't allow them with non-POD types, so this function wouldn't compile. After reading through the function it seems that the array wasn't necessary as the check could be calculated inline rather than separately. This version should be more performant (since it no longer requires the VLA lookup performance hit) while taking up less memory in all but the smallest of edge-cases (when the clustering_key_size * sizeof(optional<bool>) < sizeof(size_type) - sizeof(uint32_t) + sizeof(bool). This patch uses relation_order_unsupported it assure that the exception order is consistent with the preivous version. The throw would otherwise be moved into the initial for-loop. There are two derrivations in behavior: The first is the initial assert. It however should not change the apparent behavior besides causing orderings() to be looked up 2x in debug situations. The second is the conversion of is_reversed_ from an optional to a bool. The result is that the final return value is now well-defined to be false in the release-condition where orderings().size() == 0, rather than be the ill-defined *is_reversed_ that was there previously. Signed-off-by: Erich Keane <erich.keane@verizon.net> Message-Id: <1454546285-16076-4-git-send-email-erich.keane@verizon.net>