@@ -83,9 +83,23 @@ concept PatternCallback_t = requires(T func, std::size_t index, CMemory match)
8383# define PatternCallback_t typename
8484#endif
8585
86+ #if defined(__clang__)
87+ # define DYNLIB_FORCE_INLINE [[gnu::always_inline]] [[gnu::gnu_inline]] extern inline
88+ # define DYNLIB_NOINLINE [[gnu::noinline]]
89+ #elif defined(__GNUC__)
90+ # define DYNLIB_FORCE_INLINE [[gnu::always_inline]] inline
91+ # define DYNLIB_NOINLINE [[gnu::noinline]]
92+ #elif defined(_MSC_VER)
93+ # pragma warning(error: 4714)
94+ # define DYNLIB_FORCE_INLINE [[msvc::forceinline]]
95+ # define DYNLIB_NOINLINE __declspec (noinline)
96+ #else
97+ # define DYNLIB_FORCE_INLINE inline
98+ # define DYNLIB_NOINLINE
99+ #endif
100+
86101template <std::size_t INDEX = 0 , std::size_t N, std::size_t SIZE = (N - 1 ) / 2 >
87- [[always_inline, nodiscard]]
88- inline DYNLIB_COMPILE_TIME_EXPR void ProcessStringPattern (const char (&szInput)[N], std::size_t& n, std::size_t& nIndex, std::array<std::uint8_t, SIZE>& aBytes, std::array<char, SIZE>& aMask)
102+ DYNLIB_FORCE_INLINE DYNLIB_COMPILE_TIME_EXPR void ProcessStringPattern (const char (&szInput)[N], std::size_t& n, std::size_t& nIndex, std::array<std::uint8_t, SIZE>& aBytes, std::array<char, SIZE>& aMask)
89103{
90104 static_assert (SIZE > 0 , " Process pattern cannot be empty" );
91105
@@ -172,8 +186,7 @@ inline DYNLIB_COMPILE_TIME_EXPR void ProcessStringPattern(const char (&szInput)[
172186// Output : Pattern_t<SIZE> (fixed-size array by N cells with mask and used size)
173187// ----------------------------------------------------------------------------
174188template <std::size_t N, std::size_t SIZE = (N - 1 ) / 2>
175- [[always_inline, nodiscard]]
176- inline DYNLIB_COMPILE_TIME_EXPR auto ParseStringPattern(const char (&szInput)[N])
189+ [[nodiscard]] DYNLIB_FORCE_INLINE DYNLIB_COMPILE_TIME_EXPR auto ParseStringPattern(const char (&szInput)[N])
177190{
178191 static_assert (SIZE > 0 , " Pattern cannot be empty" );
179192
0 commit comments