/*============================================================================= Copyright (c) 2001-2014 Joel de Guzman Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ==============================================================================*/ #if !defined(BOOST_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM) #define BOOST_SPIRIT_X3_NEGATED_CHAR_PARSER_APR_16_2006_0906AM #if defined(_MSC_VER) #pragma once #endif #include #include #include namespace boost { namespace spirit { namespace x3 { /////////////////////////////////////////////////////////////////////////// // negated_char_parser handles ~cp expressions (cp is a char_parser) /////////////////////////////////////////////////////////////////////////// template struct negated_char_parser : char_parser> { negated_char_parser(Positive const& positive) : positive(positive) {} template bool test(CharParam ch, Context const& context) const { return !positive.test(ch, context); } Positive positive; }; template inline negated_char_parser operator~(char_parser const& cp) { return negated_char_parser(cp.derived()); } template inline Positive const& operator~(negated_char_parser const& cp) { return cp.positive; } }}} namespace boost { namespace spirit { namespace x3 { namespace traits { template struct attribute_of, Context> : attribute_of {}; template struct has_attribute, Context> : has_attribute {}; }}}} #endif