util/StringVerify: new library

This commit is contained in:
Max Kellermann 2024-07-08 16:00:13 +02:00
parent 553c2e9e2b
commit bd59c889f3
3 changed files with 47 additions and 18 deletions

View File

@ -10,6 +10,7 @@
#include "Partition.hxx"
#include "IdleFlags.hxx"
#include "util/CharUtil.hxx"
#include "util/StringVerify.hxx"
CommandResult
handle_enableoutput(Client &client, Request args, Response &r)
@ -62,22 +63,16 @@ handle_toggleoutput(Client &client, Request args, Response &r)
return CommandResult::OK;
}
static bool
static constexpr bool
IsValidAttributeNameChar(char ch) noexcept
{
return IsAlphaNumericASCII(ch) || ch == '_';
}
[[gnu::pure]]
static bool
static constexpr bool
IsValidAttributeName(const char *s) noexcept
{
do {
if (!IsValidAttributeNameChar(*s))
return false;
} while (*++s);
return true;
return CheckCharsNonEmpty(s, IsValidAttributeNameChar);
}
CommandResult

View File

@ -10,6 +10,7 @@
#include "client/Client.hxx"
#include "client/Response.hxx"
#include "util/CharUtil.hxx"
#include "util/StringVerify.hxx"
#include <fmt/format.h>
@ -39,21 +40,15 @@ handle_listpartitions(Client &client, Request, Response &r)
}
static constexpr bool
IsValidPartitionChar(char ch)
IsValidPartitionChar(char ch) noexcept
{
return IsAlphaNumericASCII(ch) || ch == '-' || ch == '_';
}
[[gnu::pure]]
static bool
static constexpr bool
IsValidPartitionName(const char *name) noexcept
{
do {
if (!IsValidPartitionChar(*name))
return false;
} while (*++name != 0);
return true;
return CheckCharsNonEmpty(name, IsValidPartitionChar);
}
[[gnu::pure]]

39
src/util/StringVerify.hxx Normal file
View File

@ -0,0 +1,39 @@
// SPDX-License-Identifier: BSD-2-Clause
// Copyright CM4all GmbH
// author: Max Kellermann <mk@cm4all.com>
#pragma once
#include <algorithm>
#include <concepts>
#include <string_view>
/**
* Does the given string consist only of characters allowed by the
* given function?
*/
constexpr bool
CheckChars(std::string_view s, std::predicate<char> auto f) noexcept
{
return std::all_of(s.begin(), s.end(), f);
}
/**
* Is the given string non-empty and consists only of characters
* allowed by the given function?
*/
constexpr bool
CheckCharsNonEmpty(std::string_view s, std::predicate<char> auto f) noexcept
{
return !s.empty() && CheckChars(s, f);
}
constexpr bool
CheckCharsNonEmpty(const char *s, std::predicate<char> auto f) noexcept
{
do {
if (!f(*s))
return false;
} while (*++s);
return true;
}