// Matrix Construct // // Copyright (C) Matrix Construct Developers, Authors & Contributors // Copyright (C) 2016-2019 Jason Volk // // Permission to use, copy, modify, and/or distribute this software for any // purpose with or without fee is hereby granted, provided that the above // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. #pragma once #define HAVE_IRCD_GLOBULAR_H namespace ircd { // Globular ('*' and '?') expression utils. struct globular_imatch; struct globular_iequals; } /// Globular equals. This allows either side of the comparison to include '*' /// and '?' characters and equality of the string expressions will be /// determined. Case insensitive. struct ircd::globular_iequals :returns { using is_transparent = std::true_type; bool operator()(const string_view &a, const string_view &b) const noexcept; template globular_iequals(A&& a, B&& b) :returns(operator()(std::forward(a), std::forward(b))) {} }; /// Globular match. Similar to globular_equals but only one side of the /// comparison is considered to be the expression with '*' and '?' characters. /// The expression string is passed at construction. The comparison inputs are /// treated as non-expression strings. This allows for greater optimization /// than globular_equals. Case insensitive. struct ircd::globular_imatch { string_view a; bool operator()(const string_view &b) const noexcept; globular_imatch(const string_view &expr) :a{expr} {} };