You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
690 B
C++
36 lines
690 B
C++
9 years ago
|
#pragma once
|
||
|
|
||
|
#include <boost/variant/static_visitor.hpp>
|
||
|
|
||
|
#include "mstch/mstch.hpp"
|
||
|
#include "has_token.hpp"
|
||
|
|
||
|
namespace mstch {
|
||
|
|
||
|
class get_token: public boost::static_visitor<const mstch::node&> {
|
||
|
public:
|
||
|
get_token(const std::string& token, const mstch::node& node):
|
||
|
m_token(token), m_node(node)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
template<class T>
|
||
|
const mstch::node& operator()(const T&) const {
|
||
|
return m_node;
|
||
|
}
|
||
|
|
||
|
const mstch::node& operator()(const map& map) const {
|
||
|
return map.at(m_token);
|
||
|
}
|
||
|
|
||
|
const mstch::node& operator()(const std::shared_ptr<object>& object) const {
|
||
|
return object->at(m_token);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
const std::string& m_token;
|
||
|
const mstch::node& m_node;
|
||
|
};
|
||
|
|
||
|
}
|