From 5287af979e5abffb2cfcdadb9a7663b42a5c43e5 Mon Sep 17 00:00:00 2001 From: Peter Powell Date: Thu, 17 Aug 2017 18:32:19 +0100 Subject: Add a class which encapsulates the concept of token lists. --- include/configreader.h | 6 ++--- include/token_list.h | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 3 deletions(-) create mode 100644 include/token_list.h (limited to 'include') diff --git a/include/configreader.h b/include/configreader.h index 9fcb9c6a3..fc8c99d62 100644 --- a/include/configreader.h +++ b/include/configreader.h @@ -31,6 +31,7 @@ #include "modules.h" #include "socketengine.h" #include "socket.h" +#include "token_list.h" /** Structure representing a single \ in config */ class CoreExport ConfigTag : public refcountbase @@ -165,9 +166,8 @@ struct CommandLineConf class CoreExport OperInfo : public refcountbase { public: - typedef insp::flat_set PrivSet; - PrivSet AllowedOperCommands; - PrivSet AllowedPrivs; + TokenList AllowedOperCommands; + TokenList AllowedPrivs; /** Allowed user modes from oper classes. */ std::bitset<64> AllowedUserModes; diff --git a/include/token_list.h b/include/token_list.h new file mode 100644 index 000000000..ffa3b89e6 --- /dev/null +++ b/include/token_list.h @@ -0,0 +1,65 @@ +/* + * InspIRCd -- Internet Relay Chat Daemon + * + * Copyright (C) 2017 Peter Powell + * + * This file is part of InspIRCd. InspIRCd is free software: you can + * redistribute it and/or modify it under the terms of the GNU General Public + * License as published by the Free Software Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + + +#pragma once + +#include "compat.h" + +class CoreExport TokenList +{ + private: + /** Whether this list includes all tokens by default. */ + bool permissive; + + /** Either the tokens to exclude if in permissive mode or the tokens to include if in strict mode. */ + insp::flat_set tokens; + + public: + /** Adds a space-delimited list of tokens to the token list. + * @param tokenlist The list of space-delimited tokens to add. + */ + void AddList(const std::string& tokenlist); + + /** Adds a single token to the token list. + * @param token The token to add. + */ + void Add(const std::string& token); + + /** Removes all tokens from the token list. */ + void Clear(); + + /** Determines whether the specified token exists in the token list. + * @param token The token to search for. + */ + bool Contains(const std::string& token) const; + + /** Removes the specified token from the token list. + * @param token The token to remove. + */ + void Remove(const std::string& token); + + /** Retrieves a string which represents the contents of this token list. */ + std::string ToString() const; + + /** Determines whether the specified token list contains the same tokens as this instance. + * @param other The tokenlist to compare against. + * @return True if the token lists are equal; otherwise, false. + */ + bool operator==(const TokenList& other) const; +}; -- cgit v1.2.3