add boost on mac
This commit is contained in:
143
macx64/include/boost/xpressive/detail/static/visitor.hpp
Normal file
143
macx64/include/boost/xpressive/detail/static/visitor.hpp
Normal file
@@ -0,0 +1,143 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// visitor.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_STATIC_VISITOR_HPP_EAN_10_04_2005
|
||||
#define BOOST_XPRESSIVE_DETAIL_STATIC_VISITOR_HPP_EAN_10_04_2005
|
||||
|
||||
// MS compatible compilers support #pragma once
|
||||
#if defined(_MSC_VER)
|
||||
# pragma once
|
||||
#endif
|
||||
|
||||
#include <boost/ref.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/xpressive/detail/detail_fwd.hpp>
|
||||
#include <boost/xpressive/detail/core/regex_impl.hpp>
|
||||
#include <boost/xpressive/detail/static/transmogrify.hpp>
|
||||
#include <boost/xpressive/detail/core/matcher/mark_begin_matcher.hpp>
|
||||
|
||||
namespace boost { namespace xpressive { namespace detail
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
template<typename BidiIter>
|
||||
struct xpression_visitor_base
|
||||
{
|
||||
explicit xpression_visitor_base(shared_ptr<regex_impl<BidiIter> > const &self)
|
||||
: self_(self)
|
||||
{
|
||||
}
|
||||
|
||||
void swap(xpression_visitor_base<BidiIter> &that)
|
||||
{
|
||||
this->self_.swap(that.self_);
|
||||
}
|
||||
|
||||
int get_hidden_mark()
|
||||
{
|
||||
return -(int)(++this->self_->hidden_mark_count_);
|
||||
}
|
||||
|
||||
void mark_number(int mark_nbr)
|
||||
{
|
||||
if(0 < mark_nbr)
|
||||
{
|
||||
this->self_->mark_count_ =
|
||||
(std::max)(this->self_->mark_count_, (std::size_t)mark_nbr);
|
||||
}
|
||||
}
|
||||
|
||||
shared_ptr<regex_impl<BidiIter> > &self()
|
||||
{
|
||||
return this->self_;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
template<typename Matcher>
|
||||
void visit_(Matcher const &)
|
||||
{
|
||||
}
|
||||
|
||||
void visit_(reference_wrapper<basic_regex<BidiIter> > const &rex)
|
||||
{
|
||||
// when visiting an embedded regex, track the references
|
||||
this->self_->track_reference(*detail::core_access<BidiIter>::get_regex_impl(rex.get()));
|
||||
}
|
||||
|
||||
void visit_(reference_wrapper<basic_regex<BidiIter> const> const &rex)
|
||||
{
|
||||
// when visiting an embedded regex, track the references
|
||||
this->self_->track_reference(*detail::core_access<BidiIter>::get_regex_impl(rex.get()));
|
||||
}
|
||||
|
||||
void visit_(tracking_ptr<regex_impl<BidiIter> > const &rex)
|
||||
{
|
||||
// when visiting an embedded regex, track the references
|
||||
this->self_->track_reference(*rex.get());
|
||||
}
|
||||
|
||||
void visit_(mark_placeholder const &backref)
|
||||
{
|
||||
// keep track of the largest mark number found
|
||||
this->mark_number(backref.mark_number_);
|
||||
}
|
||||
|
||||
void visit_(mark_begin_matcher const &mark_begin)
|
||||
{
|
||||
// keep track of the largest mark number found
|
||||
this->mark_number(mark_begin.mark_number_);
|
||||
}
|
||||
|
||||
private:
|
||||
shared_ptr<regex_impl<BidiIter> > self_;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
template<typename BidiIter, typename ICase, typename Traits>
|
||||
struct xpression_visitor
|
||||
: xpression_visitor_base<BidiIter>
|
||||
{
|
||||
typedef BidiIter iterator_type;
|
||||
typedef ICase icase_type;
|
||||
typedef Traits traits_type;
|
||||
typedef typename boost::iterator_value<BidiIter>::type char_type;
|
||||
|
||||
explicit xpression_visitor(Traits const &tr, shared_ptr<regex_impl<BidiIter> > const &self)
|
||||
: xpression_visitor_base<BidiIter>(self)
|
||||
, traits_(tr)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename Matcher>
|
||||
struct apply
|
||||
{
|
||||
typedef typename transmogrify<BidiIter, ICase, Traits, Matcher>::type type;
|
||||
};
|
||||
|
||||
template<typename Matcher>
|
||||
typename apply<Matcher>::type
|
||||
call(Matcher const &matcher)
|
||||
{
|
||||
this->visit_(matcher);
|
||||
return transmogrify<BidiIter, ICase, Traits, Matcher>::call(matcher, *this);
|
||||
}
|
||||
|
||||
Traits const &traits() const
|
||||
{
|
||||
return this->traits_;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Traits traits_;
|
||||
};
|
||||
|
||||
}}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user