added concept for iterators, reworked interface

This commit is contained in:
2025-10-06 14:25:52 +03:00
parent 170f969697
commit e7ccc2ead0
2 changed files with 4 additions and 8 deletions

View File

@@ -36,10 +36,11 @@ namespace omath
public: public:
[[nodiscard]] [[nodiscard]]
static std::optional<std::span<std::byte>::const_iterator> scan_for_pattern(const std::span<std::byte>& range, static std::span<std::byte>::const_iterator scan_for_pattern(const std::span<std::byte>& range,
const std::string_view& pattern); const std::string_view& pattern);
template<class IteratorType> template<class IteratorType>
requires std::input_or_output_iterator<std::remove_cvref_t<IteratorType>>
static IteratorType scan_for_pattern(const IteratorType& begin, const IteratorType& end, static IteratorType scan_for_pattern(const IteratorType& begin, const IteratorType& end,
const std::string_view& pattern) const std::string_view& pattern)
{ {

View File

@@ -7,15 +7,10 @@
namespace omath namespace omath
{ {
std::optional<std::span<std::byte>::const_iterator> std::span<std::byte>::const_iterator
PatternScanner::scan_for_pattern(const std::span<std::byte>& range, const std::string_view& pattern) PatternScanner::scan_for_pattern(const std::span<std::byte>& range, const std::string_view& pattern)
{ {
auto result = scan_for_pattern(range.begin(), range.end(), pattern); return scan_for_pattern(range.begin(), range.end(), pattern);
if (result == range.end())
return std::nullopt;
return result;
} }
std::expected<std::vector<std::optional<std::byte>>, PatternScanError> std::expected<std::vector<std::optional<std::byte>>, PatternScanError>
PatternScanner::parse_pattern(const std::string_view& pattern_string) PatternScanner::parse_pattern(const std::string_view& pattern_string)