![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/xpressive/detail/core/ |
Upload File : |
/////////////////////////////////////////////////////////////////////////////// // adaptor.hpp // // Copyright 2008 Eric Niebler. 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) #ifndef BOOST_XPRESSIVE_DETAIL_CORE_ADAPTOR_HPP_EAN_10_04_2005 #define BOOST_XPRESSIVE_DETAIL_CORE_ADAPTOR_HPP_EAN_10_04_2005 // MS compatible compilers support #pragma once #if defined(_MSC_VER) # pragma once #endif #include <boost/ref.hpp> #include <boost/implicit_cast.hpp> #include <boost/intrusive_ptr.hpp> #include <boost/xpressive/detail/detail_fwd.hpp> #include <boost/xpressive/detail/dynamic/matchable.hpp> namespace boost { namespace xpressive { namespace detail { /////////////////////////////////////////////////////////////////////////////// // xpression_adaptor // // wrap a static xpression in a matchable interface so it can be stored // in and invoked from a basic_regex object. template<typename Xpr, typename Base> struct xpression_adaptor : Base // either matchable or matchable_ex { typedef typename Base::iterator_type iterator_type; typedef typename iterator_value<iterator_type>::type char_type; Xpr xpr_; xpression_adaptor(Xpr const &xpr) #if BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4)) // Ugh, gcc has an optimizer bug which elides this c'tor call // resulting in pure virtual function calls. __attribute__((__noinline__)) #endif : xpr_(xpr) { } virtual bool match(match_state<iterator_type> &state) const { typedef typename boost::unwrap_reference<Xpr const>::type xpr_type; return implicit_cast<xpr_type &>(this->xpr_).match(state); } void link(xpression_linker<char_type> &linker) const { this->xpr_.link(linker); } void peek(xpression_peeker<char_type> &peeker) const { this->xpr_.peek(peeker); } private: xpression_adaptor &operator =(xpression_adaptor const &); }; /////////////////////////////////////////////////////////////////////////////// // make_adaptor // template<typename Base, typename Xpr> inline intrusive_ptr<Base const> make_adaptor(Xpr const &xpr) { return intrusive_ptr<Base const>(new xpression_adaptor<Xpr, Base>(xpr)); } }}} // namespace boost::xpressive::detail #endif