lib/message-flags: update whitespace & clang++ appeasement

This commit is contained in:
Dirk-Jan C. Binnema 2022-02-18 07:10:31 +02:00
parent 0f87cedb77
commit fe2b1693c1
1 changed files with 50 additions and 60 deletions

View File

@ -23,6 +23,7 @@
#include <algorithm> #include <algorithm>
#include <optional> #include <optional>
#include <string_view> #include <string_view>
#include <array>
#include "utils/mu-utils.hh" #include "utils/mu-utils.hh"
namespace Mu { namespace Mu {
@ -55,14 +56,13 @@ enum struct MessageFlags {
Encrypted = 1 << 8, /**< Encrypted */ Encrypted = 1 << 8, /**< Encrypted */
HasAttachment = 1 << 9, /**< Has an attachment */ HasAttachment = 1 << 9, /**< Has an attachment */
Unread = 1 << 10, /**< Unread; pseudo-flag, only for queries, so Unread = 1 << 10, /**< Unread; pseudo-flag, only for queries, so we can
* we can search for flag:unread, which is * search for flag:unread, which is equivalent to
* equivalent to 'flag:new OR NOT * 'flag:new OR NOT flag:seen' */
* flag:seen' */
/** /**
* other content flags * other content flags
*/ */
MailingList = 1 << 11,/**< A mailing-list message */ MailingList = 1 << 11, /**< A mailing-list message */
/* /*
* <private> * <private>
@ -76,46 +76,46 @@ MU_ENABLE_BITOPS(MessageFlags);
* *
*/ */
enum struct MessageFlagCategory { enum struct MessageFlagCategory {
None, /**< Nothing */ None, /**< Nothing */
Mailfile, /**< Flag for a message file */ Mailfile, /**< Flag for a message file */
Maildir, /**< Flag for message file's location */ Maildir, /**< Flag for message file's location */
Content, /**< Message content flag */ Content, /**< Message content flag */
Pseudo /**< Pseuodo flag */ Pseudo /**< Pseuodo flag */
}; };
/** /**
* Info about invidual message flags * Info about invidual message flags
* *
*/ */
struct MessageFlagInfo { struct MessageFlagInfo {
MessageFlags flag; /**< The message flag */ MessageFlags flag; /**< The message flag */
char shortcut; /**< Shortcut character */ char shortcut; /**< Shortcut character */
std::string_view name; /**< Name of the flag */ std::string_view name; /**< Name of the flag */
MessageFlagCategory category; /**< Flag category */ MessageFlagCategory category; /**< Flag category */
}; };
/** /**
* Array of all flag information. * Array of all flag information.
*/ */
constexpr std::array<MessageFlagInfo, 12> constexpr std::array<MessageFlagInfo, 12> AllMessageFlagInfos = {{
AllMessageFlagInfos = {{ MessageFlagInfo{MessageFlags::Draft, 'D', "draft", MessageFlagCategory::Mailfile},
{MessageFlags::Draft, 'D', "draft", MessageFlagCategory::Mailfile}, MessageFlagInfo{MessageFlags::Flagged, 'F', "flagged", MessageFlagCategory::Mailfile},
{MessageFlags::Flagged, 'F', "flagged", MessageFlagCategory::Mailfile}, MessageFlagInfo{MessageFlags::Passed, 'P', "passed", MessageFlagCategory::Mailfile},
{MessageFlags::Passed, 'P', "passed", MessageFlagCategory::Mailfile}, MessageFlagInfo{MessageFlags::Replied, 'R', "replied", MessageFlagCategory::Mailfile},
{MessageFlags::Replied, 'R', "replied", MessageFlagCategory::Mailfile}, MessageFlagInfo{MessageFlags::Seen, 'S', "seen", MessageFlagCategory::Mailfile},
{MessageFlags::Seen, 'S', "seen", MessageFlagCategory::Mailfile}, MessageFlagInfo{MessageFlags::Trashed, 'T', "trashed", MessageFlagCategory::Mailfile},
{MessageFlags::Trashed, 'T', "trashed", MessageFlagCategory::Mailfile},
{MessageFlags::New, 'N', "new", MessageFlagCategory::Maildir}, MessageFlagInfo{MessageFlags::New, 'N', "new", MessageFlagCategory::Maildir},
{MessageFlags::Signed, 'z', "signed", MessageFlagCategory::Content}, MessageFlagInfo{MessageFlags::Signed, 'z', "signed", MessageFlagCategory::Content},
{MessageFlags::Encrypted, 'x', "encrypted", MessageFlagCategory::Content}, MessageFlagInfo{MessageFlags::Encrypted, 'x', "encrypted",
{MessageFlags::HasAttachment, 'a', "attach", MessageFlagCategory::Content}, MessageFlagCategory::Content},
MessageFlagInfo{MessageFlags::HasAttachment, 'a', "attach",
MessageFlagCategory::Content},
{MessageFlags::Unread, 'u', "unread", MessageFlagCategory::Pseudo}, MessageFlagInfo{MessageFlags::Unread, 'u', "unread", MessageFlagCategory::Pseudo},
{MessageFlags::MailingList, 'l', "list", MessageFlagCategory::Content}, MessageFlagInfo{MessageFlags::MailingList, 'l', "list", MessageFlagCategory::Content},
}}; }};
/** /**
@ -129,7 +129,7 @@ constexpr const std::optional<MessageFlagInfo>
message_flag_info(MessageFlags flag) message_flag_info(MessageFlags flag)
{ {
constexpr auto upper = static_cast<unsigned>(MessageFlags::_final_); constexpr auto upper = static_cast<unsigned>(MessageFlags::_final_);
const auto val = static_cast<unsigned>(flag); const auto val = static_cast<unsigned>(flag);
if (__builtin_popcount(val) != 1 || val >= upper) if (__builtin_popcount(val) != 1 || val >= upper)
return std::nullopt; return std::nullopt;
@ -137,7 +137,6 @@ message_flag_info(MessageFlags flag)
return AllMessageFlagInfos[static_cast<unsigned>(__builtin_ctz(val))]; return AllMessageFlagInfos[static_cast<unsigned>(__builtin_ctz(val))];
} }
/** /**
* Get flag info for some flag * Get flag info for some flag
* *
@ -148,7 +147,7 @@ message_flag_info(MessageFlags flag)
constexpr const std::optional<MessageFlagInfo> constexpr const std::optional<MessageFlagInfo>
message_flag_info(char shortcut) message_flag_info(char shortcut)
{ {
for (auto&& info: AllMessageFlagInfos) for (auto&& info : AllMessageFlagInfos)
if (info.shortcut == shortcut) if (info.shortcut == shortcut)
return info; return info;
@ -165,14 +164,13 @@ message_flag_info(char shortcut)
constexpr const std::optional<MessageFlagInfo> constexpr const std::optional<MessageFlagInfo>
message_flag_info(std::string_view name) message_flag_info(std::string_view name)
{ {
for (auto&& info: AllMessageFlagInfos) for (auto&& info : AllMessageFlagInfos)
if (info.name == name) if (info.name == name)
return info; return info;
return std::nullopt; return std::nullopt;
} }
/** /**
* There are two string-based expression types for flags: * There are two string-based expression types for flags:
* 1) 'absolute': replace the existing flags * 1) 'absolute': replace the existing flags
@ -189,12 +187,11 @@ message_flag_info(std::string_view name)
* @return the (OR'ed) flags or MessageFlags::None * @return the (OR'ed) flags or MessageFlags::None
*/ */
constexpr std::optional<MessageFlags> constexpr std::optional<MessageFlags>
message_flags_from_absolute_expr(std::string_view expr, message_flags_from_absolute_expr(std::string_view expr, bool ignore_invalid = false)
bool ignore_invalid=false)
{ {
MessageFlags flags{MessageFlags::None}; MessageFlags flags{MessageFlags::None};
for (auto&& kar: expr) { for (auto&& kar : expr) {
if (const auto& info{message_flag_info(kar)}; !info) { if (const auto& info{message_flag_info(kar)}; !info) {
if (!ignore_invalid) if (!ignore_invalid)
return std::nullopt; return std::nullopt;
@ -224,24 +221,19 @@ message_flags_from_absolute_expr(std::string_view expr,
*/ */
constexpr std::optional<MessageFlags> constexpr std::optional<MessageFlags>
message_flags_from_delta_expr(std::string_view expr, MessageFlags flags, message_flags_from_delta_expr(std::string_view expr, MessageFlags flags,
bool ignore_invalid=false) bool ignore_invalid = false)
{ {
if (expr.size() % 2 != 0) if (expr.size() % 2 != 0)
return std::nullopt; return std::nullopt;
for (auto u = 0U; u != expr.size(); u+=2) { for (auto u = 0U; u != expr.size(); u += 2) {
if (const auto& info{message_flag_info(expr[u + 1])}; !info) {
if (const auto& info{message_flag_info(expr[u+1])}; !info) {
if (!ignore_invalid) if (!ignore_invalid)
return std::nullopt; return std::nullopt;
} else { } else {
switch(expr[u]) { switch (expr[u]) {
case '+': case '+': flags |= info->flag; break;
flags |= info->flag; case '-': flags &= ~info->flag; break;
break;
case '-':
flags &= ~info->flag;
break;
default: default:
if (!ignore_invalid) if (!ignore_invalid)
return std::nullopt; return std::nullopt;
@ -253,8 +245,6 @@ message_flags_from_delta_expr(std::string_view expr, MessageFlags flags,
return flags; return flags;
} }
/** /**
* Calculate the flags from either 'absolute' or 'delta' expressions * Calculate the flags from either 'absolute' or 'delta' expressions
* *
@ -264,15 +254,15 @@ message_flags_from_delta_expr(std::string_view expr, MessageFlags flags,
* @return either messages flags or std::nullopt in case of error. * @return either messages flags or std::nullopt in case of error.
*/ */
constexpr std::optional<MessageFlags> constexpr std::optional<MessageFlags>
message_flags_from_expr(std::string_view expr, message_flags_from_expr(std::string_view expr,
std::optional<MessageFlags> flags=std::nullopt) std::optional<MessageFlags> flags = std::nullopt)
{ {
if (expr.empty()) if (expr.empty())
return std::nullopt; return std::nullopt;
if (expr[0] == '+' || expr[0] == '-') if (expr[0] == '+' || expr[0] == '-')
return message_flags_from_delta_expr( return message_flags_from_delta_expr(
expr, flags.value_or(MessageFlags::None), true); expr, flags.value_or(MessageFlags::None), true);
else else
return message_flags_from_absolute_expr(expr, true); return message_flags_from_absolute_expr(expr, true);
} }
@ -288,7 +278,7 @@ message_flags_from_expr(std::string_view expr,
constexpr MessageFlags constexpr MessageFlags
message_flags_filter(MessageFlags flags, MessageFlagCategory cat) message_flags_filter(MessageFlags flags, MessageFlagCategory cat)
{ {
for (auto&& info: AllMessageFlagInfos) for (auto&& info : AllMessageFlagInfos)
if (info.category != cat) if (info.category != cat)
flags &= ~info.flag; flags &= ~info.flag;
return flags; return flags;
@ -303,6 +293,6 @@ message_flags_filter(MessageFlags flags, MessageFlagCategory cat)
*/ */
std::string message_flags_to_string(MessageFlags flags); std::string message_flags_to_string(MessageFlags flags);
} // namepace Mu } // namespace Mu
#endif /* MU_MESSAGE_FLAGS_HH__ */ #endif /* MU_MESSAGE_FLAGS_HH__ */