Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/spirit/home/qi/string/tst.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/spirit/home/qi/string/tst.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,137 @@ +/*============================================================================= + Copyright (c) 2001-2011 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_TST_JUNE_03_2007_1031AM) +#define BOOST_SPIRIT_TST_JUNE_03_2007_1031AM + +#if defined(_MSC_VER) +#pragma once +#endif + +#include <boost/spirit/home/qi/string/detail/tst.hpp> + +namespace boost { namespace spirit { namespace qi +{ + struct tst_pass_through + { + template <typename Char> + Char operator()(Char ch) const + { + return ch; + } + }; + + template <typename Char, typename T> + struct tst + { + typedef Char char_type; // the character type + typedef T value_type; // the value associated with each entry + typedef detail::tst_node<Char, T> node; + + tst() + : root(0) + { + } + + ~tst() + { + clear(); + } + + tst(tst const& rhs) + : root(0) + { + copy(rhs); + } + + tst& operator=(tst const& rhs) + { + return assign(rhs); + } + + template <typename Iterator, typename Filter> + T* find(Iterator& first, Iterator last, Filter filter) const + { + return node::find(root, first, last, filter); + } + + template <typename Iterator> + T* find(Iterator& first, Iterator last) const + { + return find(first, last, tst_pass_through()); + } + + template <typename Iterator> + T* add( + Iterator first + , Iterator last + , typename boost::call_traits<T>::param_type val) + { + return node::add(root, first, last, val, this); + } + + template <typename Iterator> + void remove(Iterator first, Iterator last) + { + node::remove(root, first, last, this); + } + + void clear() + { + node::destruct_node(root, this); + root = 0; + } + + template <typename F> + void for_each(F f) const + { + node::for_each(root, std::basic_string<Char>(), f); + } + + private: + + friend struct detail::tst_node<Char, T>; + + void copy(tst const& rhs) + { + root = node::clone_node(rhs.root, this); + } + + tst& assign(tst const& rhs) + { + if (this != &rhs) + { + clear(); + copy(rhs); + } + return *this; + } + + node* root; + + node* new_node(Char id) + { + return new node(id); + } + + T* new_data(typename boost::call_traits<T>::param_type val) + { + return new T(val); + } + + void delete_node(node* p) + { + delete p; + } + + void delete_data(T* p) + { + delete p; + } + }; +}}} + +#endif