// end_node.hpp | |
// Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/) | |
// | |
// Distributed under the Boost Software License, Version 1.0. (See accompanying | |
// file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
#ifndef BOOST_LEXER_END_NODE_HPP | |
#define BOOST_LEXER_END_NODE_HPP | |
#include "node.hpp" | |
#include "../../size_t.hpp" | |
namespace boost | |
{ | |
namespace lexer | |
{ | |
namespace detail | |
{ | |
class end_node : public node | |
{ | |
public: | |
end_node (const std::size_t id_, const std::size_t unique_id_, | |
const std::size_t lexer_state_) : | |
node (false), | |
_id (id_), | |
_unique_id (unique_id_), | |
_lexer_state (lexer_state_) | |
{ | |
node::_firstpos.push_back (this); | |
node::_lastpos.push_back (this); | |
} | |
virtual ~end_node () | |
{ | |
} | |
virtual type what_type () const | |
{ | |
return END; | |
} | |
virtual bool traverse (const_node_stack &/*node_stack_*/, | |
bool_stack &/*perform_op_stack_*/) const | |
{ | |
return false; | |
} | |
virtual const node_vector &followpos () const | |
{ | |
// _followpos is always empty..! | |
return _followpos; | |
} | |
virtual bool end_state () const | |
{ | |
return true; | |
} | |
virtual std::size_t id () const | |
{ | |
return _id; | |
} | |
virtual std::size_t unique_id () const | |
{ | |
return _unique_id; | |
} | |
virtual std::size_t lexer_state () const | |
{ | |
return _lexer_state; | |
} | |
private: | |
std::size_t _id; | |
std::size_t _unique_id; | |
std::size_t _lexer_state; | |
node_vector _followpos; | |
virtual void copy_node (node_ptr_vector &/*node_ptr_vector_*/, | |
node_stack &/*new_node_stack_*/, bool_stack &/*perform_op_stack_*/, | |
bool &/*down_*/) const | |
{ | |
// Nothing to do, as end_nodes are not copied. | |
} | |
}; | |
} | |
} | |
} | |
#endif |