00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef BRACKET_EXPRESSIONSTART_RANGE_H
00021 #define BRACKET_EXPRESSIONSTART_RANGE_H
00022
00023 namespace bracket_expression {
00024
00025 template<typename E>
00026 class start_range
00027 {
00028 typedef typename grammar_to_parser::basic_parser<E>::parser_list parser_list;
00029
00030 grammar_to_parser::basic_choice<E,collating_choice<E> > m_collating_choice;
00031 grammar_to_parser::basic_terminal<E,'-'> m_hyphen;
00032 int m_size;
00033 public:
00034 int compare( const E* buf, const unsigned long buf_length )
00035 {
00036 int ret = m_collating_choice->compare( buf, buf_length );
00037 m_size = m_collating_choice->matched_size();
00038 }
00039
00040 int matched_size() { return m_size; }
00041
00042 start_range() : m_size(0) {};
00043
00044 ~start_range() {};
00045 void push_parsers( parser_list &l )
00046 {
00047 l.push_back( &m_collating_choice );
00048 l.push_back( &m_hyphen );
00049 }
00050
00051 };
00052
00053 };
00054
00055 #endif