From ee0d6423f392b36a8f0fd9462bd72f12933cf02c Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Tue, 6 Feb 2018 13:03:38 -0800 Subject: [PATCH] ircd: Move params back into ircd::util... (w/ manual inclusion). --- charybdis/console.cc | 2 +- {charybdis => include/ircd/util}/params.h | 48 +++++++++++++---------- modules/console.cc | 2 + 3 files changed, 31 insertions(+), 21 deletions(-) rename {charybdis => include/ircd/util}/params.h (61%) diff --git a/charybdis/console.cc b/charybdis/console.cc index 4d2f5fc2e..f99191d46 100644 --- a/charybdis/console.cc +++ b/charybdis/console.cc @@ -11,8 +11,8 @@ #include #include #include +#include #include "charybdis.h" -#include "params.h" using namespace ircd; diff --git a/charybdis/params.h b/include/ircd/util/params.h similarity index 61% rename from charybdis/params.h rename to include/ircd/util/params.h index d23187670..11285355e 100644 --- a/charybdis/params.h +++ b/include/ircd/util/params.h @@ -9,11 +9,19 @@ // full license for this software is available in the LICENSE file. #pragma once -#define HAVE_CONSTRUCT_PARAMS_H +#define HAVE_IRCD_UTIL_PARAMS_H -class params +// This file is not part of the standard include stack. It is included +// manually as needed. + +namespace ircd::util { - ircd::string_view in; + struct params; +} + +class ircd::util::params +{ + string_view in; const char *sep; std::vector names; @@ -25,20 +33,20 @@ class params IRCD_EXCEPTION(error, invalid) size_t count() const; - ircd::string_view operator[](const size_t &i) const; // returns empty + string_view operator[](const size_t &i) const; // returns empty template T at(const size_t &i, const T &def) const; // throws invalid template T at(const size_t &i) const; // throws missing or invalid - ircd::string_view at(const size_t &i) const; // throws missing + string_view at(const size_t &i) const; // throws missing - params(const ircd::string_view &in, + params(const string_view &in, const char *const &sep, const std::initializer_list &names = {}); }; inline -params::params(const ircd::string_view &in, - const char *const &sep, - const std::initializer_list &names) +ircd::util::params::params(const string_view &in, + const char *const &sep, + const std::initializer_list &names) :in{in} ,sep{sep} ,names{names} @@ -47,31 +55,31 @@ params::params(const ircd::string_view &in, template T -params::at(const size_t &i, - const T &def) +ircd::util::params::at(const size_t &i, + const T &def) const try { return count() > i? at(i) : def; } -catch(const ircd::bad_lex_cast &e) +catch(const bad_lex_cast &e) { throw invalid("parameter #%zu <%s>", i, name(i)); } template T -params::at(const size_t &i) +ircd::util::params::at(const size_t &i) const try { - return ircd::lex_cast(at(i)); + return lex_cast(at(i)); } -catch(const ircd::bad_lex_cast &e) +catch(const bad_lex_cast &e) { throw invalid("parameter #%zu <%s>", i, name(i)); } inline ircd::string_view -params::at(const size_t &i) +ircd::util::params::at(const size_t &i) const try { return token(in, sep, i); @@ -82,21 +90,21 @@ catch(const std::out_of_range &e) } inline ircd::string_view -params::operator[](const size_t &i) +ircd::util::params::operator[](const size_t &i) const { - return count() > i? token(in, sep, i) : ircd::string_view{}; + return count() > i? token(in, sep, i) : string_view{}; } inline size_t -params::count() +ircd::util::params::count() const { return token_count(in, sep); } inline const char * -params::name(const size_t &i) +ircd::util::params::name(const size_t &i) const { return names.size() > i? *std::next(begin(names), i) : ""; diff --git a/modules/console.cc b/modules/console.cc index 9ba3de608..e067a869a 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -8,6 +8,8 @@ // copyright notice and this permission notice is present in all copies. The // full license for this software is available in the LICENSE file. +#include + using namespace ircd; mapi::header IRCD_MODULE