mirror of
https://github.com/matrix-construct/construct
synced 2024-11-09 11:31:11 +01:00
67 lines
2.2 KiB
C
67 lines
2.2 KiB
C
|
// The Construct
|
||
|
//
|
||
|
// Copyright (C) The Construct Developers, Authors & Contributors
|
||
|
// Copyright (C) 2016-2020 Jason Volk <jason@zemos.net>
|
||
|
//
|
||
|
// 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_SPIRIT_EXPECTATION_FAILURE_H
|
||
|
|
||
|
namespace ircd {
|
||
|
namespace spirit
|
||
|
__attribute__((visibility("default")))
|
||
|
{
|
||
|
template<class parent_error> struct expectation_failure;
|
||
|
|
||
|
// parse.cc
|
||
|
extern thread_local char rule_buffer[64];
|
||
|
}}
|
||
|
|
||
|
template<class parent_error>
|
||
|
struct __attribute__((visibility("default")))
|
||
|
ircd::spirit::expectation_failure
|
||
|
:parent_error
|
||
|
{
|
||
|
template<class it = const char *>
|
||
|
expectation_failure(const qi::expectation_failure<it> &e,
|
||
|
const ssize_t &show_max = 64);
|
||
|
|
||
|
template<class it = const char *>
|
||
|
expectation_failure(const qi::expectation_failure<it> &e,
|
||
|
const it &start,
|
||
|
const ssize_t &show_max = 64);
|
||
|
};
|
||
|
|
||
|
template<class parent>
|
||
|
template<class it>
|
||
|
ircd::spirit::expectation_failure<parent>::expectation_failure(const qi::expectation_failure<it> &e,
|
||
|
const ssize_t &show_max)
|
||
|
:parent
|
||
|
{
|
||
|
"Expected %s. You input %zd invalid characters :%s",
|
||
|
ircd::string(rule_buffer, e.what_),
|
||
|
std::distance(e.first, e.last),
|
||
|
string_view{e.first, e.first + std::min(std::distance(e.first, e.last), show_max)}
|
||
|
}
|
||
|
{}
|
||
|
|
||
|
template<class parent>
|
||
|
template<class it>
|
||
|
ircd::spirit::expectation_failure<parent>::expectation_failure(const qi::expectation_failure<it> &e,
|
||
|
const it &start,
|
||
|
const ssize_t &show_max)
|
||
|
:parent
|
||
|
{
|
||
|
"Expected %s. You input %zd invalid characters somewhere between position %zd and %zd :%s",
|
||
|
ircd::string(rule_buffer, e.what_),
|
||
|
std::distance(e.first, e.last),
|
||
|
std::distance(start, e.first),
|
||
|
std::distance(start, e.last),
|
||
|
string_view{e.first, e.first + std::min(std::distance(e.first, e.last), show_max)}
|
||
|
}
|
||
|
{}
|