1 // char_state_machine.hpp
2 // Copyright (c) 2007-2009 Ben Hanson (http://www.benhanson.net/)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file licence_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #ifndef BOOST_LEXER_CHAR_STATE_MACHINE_HPP
7 #define BOOST_LEXER_CHAR_STATE_MACHINE_HPP
8 
9 #include "../consts.hpp"
10 #include <map>
11 #include "../size_t.hpp"
12 #include "../string_token.hpp"
13 #include <vector>
14 
15 namespace boost
16 {
17 namespace lexer
18 {
19 namespace detail
20 {
21 template<typename CharT>
22 struct basic_char_state_machine
23 {
24     struct state
25     {
26         typedef basic_string_token<CharT> string_token;
27         typedef std::map<std::size_t, string_token> size_t_string_token_map;
28         typedef std::pair<std::size_t, string_token> size_t_string_token_pair;
29 
30         bool _end_state;
31         std::size_t _id;
32         std::size_t _unique_id;
33         std::size_t _state;
34         std::size_t _bol_index;
35         std::size_t _eol_index;
36         size_t_string_token_map _transitions;
37 
stateboost::lexer::detail::basic_char_state_machine::state38         state () :
39             _end_state (false),
40             _id (0),
41             _unique_id (npos),
42             _state (0),
43             _bol_index (npos),
44             _eol_index (npos)
45         {
46         }
47     };
48 
49     typedef std::vector<state> state_vector;
50     typedef std::vector<state_vector> state_vector_vector;
51 
52     state_vector_vector _sm_vector;
53 
emptyboost::lexer::detail::basic_char_state_machine54     bool empty () const
55     {
56         return _sm_vector.empty ();
57     }
58 
clearboost::lexer::detail::basic_char_state_machine59     void clear ()
60     {
61         _sm_vector.clear ();
62     }
63 
swapboost::lexer::detail::basic_char_state_machine64     void swap (basic_char_state_machine &csm_)
65     {
66         _sm_vector.swap (csm_._sm_vector);
67     }
68 };
69 
70 typedef basic_char_state_machine<char> char_state_machine;
71 typedef basic_char_state_machine<wchar_t> wchar_state_machine;
72 
73 }
74 }
75 }
76 
77 #endif
78