Main Page | Class Hierarchy | Class List | Directories | File List | Class Members

meta_char_choice.h

00001 /***************************************************************************
00002  *   Copyright (C) 2006 by Radko Mihal                                     *
00003  *   rmihal@pobox.sk                                                       *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.              *
00019  ***************************************************************************/
00020 #ifndef BRACKET_EXPRESSIONMETA_CHAR_CHOICE_H
00021 #define BRACKET_EXPRESSIONMETA_CHAR_CHOICE_H
00022 
00023 namespace bracket_expression {
00024 
00025 template<typename E>
00026 class meta_char_choice
00027 {
00028 typedef typename grammar_to_parser::basic_parser<E>::parser_list parser_list;
00029 
00030         grammar_to_parser::basic_terminal<E,'^'>                        m_circumflex;
00031         grammar_to_parser::basic_terminal<E,'-'>                        m_hyphen;
00032         grammar_to_parser::basic_terminal<E,']'>                        m_right_bracket;
00033         
00034 public:
00035     meta_char_choice() {};
00036 
00037     ~meta_char_choice() {};
00038         void push_parsers( parser_list &l )
00039         {
00040                 l.push_back( &m_circumflex );
00041                 l.push_back( &m_hyphen );
00042                 l.push_back( &m_right_bracket );
00043         }       
00044         int compare( const E* buf, const unsigned long buf_length )
00045         {
00046                 if( m_hyphen.is_parsed() )
00047                 {
00048                         if( std::use_facet< std::collate<E> >(std::locale()).compare(
00049                                                                                                 buf,
00050                                                                                                 buf+1,
00051                                                                                                 m_hyphen.get(),
00052                                                                                                 m_hyphen.get()+1 ) == 0 )
00053                         {
00054                                 return 1;
00055                         }
00056                         else
00057                         {
00058                                 return 0;
00059                         }
00060                 }
00061                 else if( m_right_bracket.is_parsed() )
00062                 {
00063                         if( std::use_facet< std::collate<E> >(std::locale()).compare(
00064                                                                                                 buf,
00065                                                                                                 buf+1,
00066                                                                                                 m_right_bracket.get(),
00067                                                                                                 m_right_bracket.get()+1) == 0 )
00068                         {
00069                                 return 1;
00070                         }
00071                         else
00072                         {
00073                                 return 0;
00074                         }
00075                 }
00076                 else
00077                 {
00078                         if( std::use_facet< std::collate<E> >(std::locale()).compare(
00079                                                                                                 buf,
00080                                                                                                 buf+1,
00081                                                                                                 m_circumflex.get(),
00082                                                                                                 m_circumflex.get()+1) == 0 )
00083                         {
00084                                 return 1;
00085                         }
00086                         else
00087                         {
00088                                 return 0;
00089                         }
00090                 }
00091         }
00092 };
00093 
00094 };
00095 
00096 #endif

Generated on Sun Jul 2 18:39:43 2006 for grammar2parser.kdevelop by  doxygen 1.4.1