Migrate WithBitOps template specialization to with_bit_ops function
This way we dont depend on knowing the base template to enable bit ops on an enum type.
This commit is contained in:
parent
a49e175727
commit
db9b863222
|
@ -115,6 +115,7 @@ public:
|
||||||
Debug = 1 << 5,
|
Debug = 1 << 5,
|
||||||
ReadOnly = 1 << 6,
|
ReadOnly = 1 << 6,
|
||||||
};
|
};
|
||||||
|
friend constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
|
||||||
|
|
||||||
Buffer(String name, Flags flags, StringView data = {},
|
Buffer(String name, Flags flags, StringView data = {},
|
||||||
timespec fs_timestamp = InvalidTime);
|
timespec fs_timestamp = InvalidTime);
|
||||||
|
@ -283,8 +284,6 @@ private:
|
||||||
mutable ValueMap m_values;
|
mutable ValueMap m_values;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<Buffer::Flags> : std::true_type {};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "buffer.inl.hh"
|
#include "buffer.inl.hh"
|
||||||
|
|
|
@ -37,7 +37,7 @@ enum class CommandFlags
|
||||||
Hidden = 1,
|
Hidden = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<CommandFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<CommandFlags>) { return true; }
|
||||||
|
|
||||||
struct CommandInfo { String name, info; };
|
struct CommandInfo { String name, info; };
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ enum class CompletionFlags
|
||||||
Start = 1 << 2,
|
Start = 1 << 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<CompletionFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<CompletionFlags>) { return true; }
|
||||||
|
|
||||||
using Completer = std::function<Completions (const Context&, CompletionFlags,
|
using Completer = std::function<Completions (const Context&, CompletionFlags,
|
||||||
StringView, ByteCount)>;
|
StringView, ByteCount)>;
|
||||||
|
|
|
@ -183,8 +183,7 @@ private:
|
||||||
NestedBool m_history_disabled;
|
NestedBool m_history_disabled;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
constexpr bool with_bit_ops(Meta::Type<Context::Flags>) { return true; }
|
||||||
struct WithBitOps<Context::Flags> : std::true_type {};
|
|
||||||
|
|
||||||
struct ScopedEdition
|
struct ScopedEdition
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "event_manager.hh"
|
#include "event_manager.hh"
|
||||||
|
|
||||||
#include "containers.hh"
|
#include "containers.hh"
|
||||||
|
#include "flags.hh"
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
#define event_manager_hh_INCLUDED
|
#define event_manager_hh_INCLUDED
|
||||||
|
|
||||||
#include "clock.hh"
|
#include "clock.hh"
|
||||||
|
#include "meta.hh"
|
||||||
#include "utils.hh"
|
#include "utils.hh"
|
||||||
#include "flags.hh"
|
|
||||||
#include "vector.hh"
|
#include "vector.hh"
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
@ -28,7 +28,7 @@ enum class FdEvents
|
||||||
Except = 1 << 2,
|
Except = 1 << 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<FdEvents> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<FdEvents>) { return true; }
|
||||||
|
|
||||||
class FDWatcher
|
class FDWatcher
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,7 +19,7 @@ enum class Attribute : int
|
||||||
Italic = 1 << 7,
|
Italic = 1 << 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<Attribute> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<Attribute>) { return true; }
|
||||||
|
|
||||||
struct Face
|
struct Face
|
||||||
{
|
{
|
||||||
|
|
|
@ -79,7 +79,7 @@ enum class FilenameFlags
|
||||||
Expand = 1 << 1
|
Expand = 1 << 1
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<FilenameFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<FilenameFlags>) { return true; }
|
||||||
|
|
||||||
CandidateList complete_filename(StringView prefix, const Regex& ignore_regex,
|
CandidateList complete_filename(StringView prefix, const Regex& ignore_regex,
|
||||||
ByteCount cursor_pos = -1,
|
ByteCount cursor_pos = -1,
|
||||||
|
|
|
@ -3,20 +3,22 @@
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
#include "meta.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
template<typename Flags>
|
template<typename Flags>
|
||||||
struct WithBitOps : std::false_type {};
|
constexpr bool with_bit_ops(Meta::Type<Flags>) { return false; }
|
||||||
|
|
||||||
template<typename Flags>
|
template<typename Flags>
|
||||||
using UnderlyingType = typename std::underlying_type<Flags>::type;
|
using UnderlyingType = typename std::underlying_type<Flags>::type;
|
||||||
|
|
||||||
template<typename Flags, typename T = void>
|
template<typename Flags, typename T = void>
|
||||||
using EnableIfWithBitOps = typename std::enable_if<WithBitOps<Flags>::value, T>::type;
|
using EnableIfWithBitOps = typename std::enable_if<with_bit_ops(Meta::Type<Flags>{}), T>::type;
|
||||||
|
|
||||||
template<typename Flags, typename T = void>
|
template<typename Flags, typename T = void>
|
||||||
using EnableIfWithoutBitOps = typename std::enable_if<not WithBitOps<Flags>::value, T>::type;
|
using EnableIfWithoutBitOps = typename std::enable_if<not with_bit_ops(Meta::Type<Flags>{}), T>::type;
|
||||||
|
|
||||||
template<typename Flags, typename = EnableIfWithBitOps<Flags>>
|
template<typename Flags, typename = EnableIfWithBitOps<Flags>>
|
||||||
constexpr Flags operator|(Flags lhs, Flags rhs)
|
constexpr Flags operator|(Flags lhs, Flags rhs)
|
||||||
|
|
|
@ -35,7 +35,7 @@ enum class PromptFlags
|
||||||
Password = 1 << 0,
|
Password = 1 << 0,
|
||||||
DropHistoryEntriesWithBlankPrefix = 1 << 1
|
DropHistoryEntriesWithBlankPrefix = 1 << 1
|
||||||
};
|
};
|
||||||
template<> struct WithBitOps<PromptFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<PromptFlags>) { return true; }
|
||||||
|
|
||||||
|
|
||||||
using KeyCallback = std::function<void (Key, Context&)>;
|
using KeyCallback = std::function<void (Key, Context&)>;
|
||||||
|
@ -131,8 +131,7 @@ enum class AutoInfo
|
||||||
Normal = 1 << 2
|
Normal = 1 << 2
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
constexpr bool with_bit_ops(Meta::Type<AutoInfo>) { return true; }
|
||||||
struct WithBitOps<AutoInfo> : std::true_type {};
|
|
||||||
|
|
||||||
constexpr Array<EnumDesc<AutoInfo>, 3> enum_desc(Meta::Type<AutoInfo>)
|
constexpr Array<EnumDesc<AutoInfo>, 3> enum_desc(Meta::Type<AutoInfo>)
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,7 @@ struct Key
|
||||||
Optional<Codepoint> codepoint() const;
|
Optional<Codepoint> codepoint() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<Key::Modifiers> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<Key::Modifiers>) { return true; }
|
||||||
|
|
||||||
using KeyList = Vector<Key, MemoryDomain::Mapping>;
|
using KeyList = Vector<Key, MemoryDomain::Mapping>;
|
||||||
|
|
||||||
|
|
|
@ -493,7 +493,7 @@ enum class ServerFlags
|
||||||
ReadOnly = 1 << 2,
|
ReadOnly = 1 << 2,
|
||||||
StartupInfo = 1 << 3,
|
StartupInfo = 1 << 3,
|
||||||
};
|
};
|
||||||
template<> struct WithBitOps<ServerFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<ServerFlags>) { return true; }
|
||||||
|
|
||||||
int run_server(StringView session,
|
int run_server(StringView session,
|
||||||
StringView init_cmds, Optional<BufferCoord> init_coord,
|
StringView init_cmds, Optional<BufferCoord> init_coord,
|
||||||
|
|
|
@ -1261,7 +1261,7 @@ enum class SelectFlags
|
||||||
Extend = 4
|
Extend = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<SelectFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<SelectFlags>) { return true; }
|
||||||
|
|
||||||
template<SelectFlags flags>
|
template<SelectFlags flags>
|
||||||
void select_to_next_char(Context& context, NormalParams params)
|
void select_to_next_char(Context& context, NormalParams params)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#include "option_manager.hh"
|
#include "option_manager.hh"
|
||||||
|
|
||||||
#include "assert.hh"
|
#include "assert.hh"
|
||||||
|
#include "flags.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
#include "completion.hh"
|
#include "completion.hh"
|
||||||
#include "containers.hh"
|
#include "containers.hh"
|
||||||
#include "exception.hh"
|
#include "exception.hh"
|
||||||
#include "flags.hh"
|
|
||||||
#include "option_types.hh"
|
#include "option_types.hh"
|
||||||
#include "vector.hh"
|
#include "vector.hh"
|
||||||
|
|
||||||
|
@ -22,7 +21,7 @@ enum class OptionFlags
|
||||||
Hidden = 1,
|
Hidden = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<OptionFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<OptionFlags>) { return true; }
|
||||||
|
|
||||||
class OptionDesc
|
class OptionDesc
|
||||||
{
|
{
|
||||||
|
|
|
@ -28,7 +28,7 @@ template<typename Enum>
|
||||||
typename std::enable_if<std::is_enum<Enum>::value, String>::type
|
typename std::enable_if<std::is_enum<Enum>::value, String>::type
|
||||||
option_type_name(Meta::Type<Enum>)
|
option_type_name(Meta::Type<Enum>)
|
||||||
{
|
{
|
||||||
constexpr StringView type = WithBitOps<Enum>::value ? "flags" : "enum";
|
constexpr StringView type = with_bit_ops(Meta::Type<Enum>{}) ? "flags" : "enum";
|
||||||
auto name = enum_desc(Meta::Type<Enum>{});
|
auto name = enum_desc(Meta::Type<Enum>{});
|
||||||
return type + "(" + join(name | transform(std::mem_fn(&EnumDesc<Enum>::name)), '|') + ")";
|
return type + "(" + join(name | transform(std::mem_fn(&EnumDesc<Enum>::name)), '|') + ")";
|
||||||
}
|
}
|
||||||
|
@ -244,8 +244,7 @@ enum class DebugFlags
|
||||||
Keys = 1 << 3,
|
Keys = 1 << 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
constexpr bool with_bit_ops(Meta::Type<DebugFlags>) { return true; }
|
||||||
struct WithBitOps<DebugFlags> : std::true_type {};
|
|
||||||
|
|
||||||
constexpr Array<EnumDesc<DebugFlags>, 4> enum_desc(Meta::Type<DebugFlags>)
|
constexpr Array<EnumDesc<DebugFlags>, 4> enum_desc(Meta::Type<DebugFlags>)
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,6 +53,7 @@ struct ParameterDesc
|
||||||
SwitchesOnlyAtStart = 1,
|
SwitchesOnlyAtStart = 1,
|
||||||
SwitchesAsPositional = 2,
|
SwitchesAsPositional = 2,
|
||||||
};
|
};
|
||||||
|
friend constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
|
||||||
|
|
||||||
ParameterDesc() = default;
|
ParameterDesc() = default;
|
||||||
ParameterDesc(SwitchMap switches, Flags flags = Flags::None,
|
ParameterDesc(SwitchMap switches, Flags flags = Flags::None,
|
||||||
|
@ -66,8 +67,6 @@ struct ParameterDesc
|
||||||
size_t max_positionals = -1;
|
size_t max_positionals = -1;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<ParameterDesc::Flags> : std::true_type {};
|
|
||||||
|
|
||||||
// ParametersParser provides tools to parse command parameters.
|
// ParametersParser provides tools to parse command parameters.
|
||||||
// There are 3 types of parameters:
|
// There are 3 types of parameters:
|
||||||
// * unnamed options, which are accessed by position (ignoring named ones)
|
// * unnamed options, which are accessed by position (ignoring named ones)
|
||||||
|
|
|
@ -9,8 +9,6 @@
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
|
||||||
template<> struct WithBitOps<RankedMatch::Flags> : std::true_type {};
|
|
||||||
|
|
||||||
UsedLetters used_letters(StringView str)
|
UsedLetters used_letters(StringView str)
|
||||||
{
|
{
|
||||||
UsedLetters res = 0;
|
UsedLetters res = 0;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#define ranked_match_hh_INCLUDED
|
#define ranked_match_hh_INCLUDED
|
||||||
|
|
||||||
#include "string.hh"
|
#include "string.hh"
|
||||||
|
#include "meta.hh"
|
||||||
|
|
||||||
namespace Kakoune
|
namespace Kakoune
|
||||||
{
|
{
|
||||||
|
@ -43,6 +44,7 @@ private:
|
||||||
Prefix = 1 << 4,
|
Prefix = 1 << 4,
|
||||||
FullMatch = 1 << 5,
|
FullMatch = 1 << 5,
|
||||||
};
|
};
|
||||||
|
friend constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
|
||||||
|
|
||||||
StringView m_candidate{};
|
StringView m_candidate{};
|
||||||
Flags m_flags = Flags::None;
|
Flags m_flags = Flags::None;
|
||||||
|
|
|
@ -60,7 +60,7 @@ enum class ObjectFlags
|
||||||
Inner = 4
|
Inner = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<ObjectFlags> : std::true_type {};
|
constexpr bool with_bit_ops(Meta::Type<ObjectFlags>) { return true; }
|
||||||
|
|
||||||
template<WordType word_type>
|
template<WordType word_type>
|
||||||
Optional<Selection>
|
Optional<Selection>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "event_manager.hh"
|
#include "event_manager.hh"
|
||||||
#include "face_registry.hh"
|
#include "face_registry.hh"
|
||||||
#include "file.hh"
|
#include "file.hh"
|
||||||
|
#include "flags.hh"
|
||||||
#include "regex.hh"
|
#include "regex.hh"
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
#include "array_view.hh"
|
#include "array_view.hh"
|
||||||
#include "env_vars.hh"
|
#include "env_vars.hh"
|
||||||
#include "flags.hh"
|
|
||||||
#include "string.hh"
|
#include "string.hh"
|
||||||
#include "utils.hh"
|
#include "utils.hh"
|
||||||
#include "completion.hh"
|
#include "completion.hh"
|
||||||
|
@ -31,6 +30,7 @@ public:
|
||||||
None = 0,
|
None = 0,
|
||||||
WaitForStdout = 1
|
WaitForStdout = 1
|
||||||
};
|
};
|
||||||
|
friend constexpr bool with_bit_ops(Meta::Type<Flags>) { return true; }
|
||||||
|
|
||||||
std::pair<String, int> eval(StringView cmdline, const Context& context,
|
std::pair<String, int> eval(StringView cmdline, const Context& context,
|
||||||
StringView input = {},
|
StringView input = {},
|
||||||
|
@ -49,8 +49,6 @@ private:
|
||||||
Vector<EnvVarDesc, MemoryDomain::EnvVars> m_env_vars;
|
Vector<EnvVarDesc, MemoryDomain::EnvVars> m_env_vars;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<> struct WithBitOps<ShellManager::Flags> : std::true_type {};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // shell_manager_hh_INCLUDED
|
#endif // shell_manager_hh_INCLUDED
|
||||||
|
|
Loading…
Reference in New Issue
Block a user