Changeset 44569


Ignore:
Timestamp:
Apr 19, 2008, 2:13:57 AM (10 years ago)
Author:
Joel de Guzman
Message:

no-case for chsets

Location:
trunk/boost/spirit/home
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/boost/spirit/home/qi/char/char.hpp

    r44491 r44569  
    1818#include <boost/utility/enable_if.hpp>
    1919#include <boost/type_traits/remove_reference.hpp>
     20#include <boost/foreach.hpp>
    2021
    2122namespace boost { namespace spirit { namespace qi
     
    254255        }
    255256    };
     257
     258    template <typename Char, typename Elements>
     259    struct char_set_component;
    256260}}}
    257261
    258262namespace boost { namespace spirit { namespace traits
    259263{
     264    ///////////////////////////////////////////////////////////////////////////
     265    // char_set_component generator
     266    ///////////////////////////////////////////////////////////////////////////
     267    template <typename Char, typename Elements, typename Modifier>
     268    struct make_component<qi::domain, qi::char_set<Char>, Elements, Modifier
     269      , typename disable_if<
     270            is_member_of_modifier<Modifier, spirit::char_class::no_case_base_tag>
     271        >::type
     272    > : mpl::identity<qi::char_set_component<Char, Elements> >
     273    {
     274        static qi::char_set_component<Char, Elements>
     275        call(Elements const& elements)
     276        {
     277            return qi::char_set_component<Char, Elements>(
     278                fusion::at_c<0>(elements));
     279        }
     280    };
     281
     282    ///////////////////////////////////////////////////////////////////////////
     283    // no_case char_set_component generator
     284    ///////////////////////////////////////////////////////////////////////////
     285    template <
     286        typename Domain, typename Elements, typename Modifier, typename Char
     287    >
     288    struct make_modified_component<
     289        Domain, qi::char_set<Char>, Elements, Modifier
     290      , typename enable_if<
     291            is_member_of_modifier<Modifier, spirit::char_class::no_case_base_tag>
     292        >::type
     293    >
     294    {
     295        typedef qi::char_set_component<Char, Elements> type;
     296        typedef typename Modifier::char_set char_set;
     297
     298        static type
     299        call(Elements const& elements)
     300        {
     301            return qi::char_set_component<Char, Elements>(
     302                fusion::at_c<0>(elements), char_set());
     303        }
     304    };
     305
    260306    ///////////////////////////////////////////////////////////////////////////
    261307    // no_case_literal_char generator
  • trunk/boost/spirit/home/qi/char/meta_grammar.hpp

    r44540 r44569  
    1919namespace boost { namespace spirit { namespace qi
    2020{
    21     template <typename Char>
    22     struct char_set;
    23 
    24     template <typename Char, typename Elements>
    25     struct char_set_component;
    26 }}}
    27 
    28 namespace boost { namespace spirit { namespace traits
    29 {
    30     template <typename Char, typename Elements, typename Modifier>
    31     struct make_component<qi::domain, qi::char_set<Char>, Elements, Modifier>
    32       : mpl::identity<qi::char_set_component<Char, Elements> >
    33     {
    34         static qi::char_set_component<Char, Elements>
    35         call(Elements const& elements)
    36         {
    37             return qi::char_set_component<Char, Elements>(
    38                 fusion::at_c<0>(elements));
    39         }
    40     };
    41 }}}
    42 
    43 namespace boost { namespace spirit { namespace qi
    44 {
    4521    ///////////////////////////////////////////////////////////////////////////
    4622    // forwards
     
    6743    struct eol_director;
    6844    struct eoi_director;
    69    
     45
    7046    ///////////////////////////////////////////////////////////////////////////
    7147    struct char_meta_grammar;
     
    244220        }
    245221
     222        template <typename CharSetClass> // no-case version
     223        char_set_component(Char const* definition, CharSetClass)
     224          : ptr(new detail::basic_chset<Char>())
     225        {
     226            Char ch = *definition++;
     227            while (ch)
     228            {
     229                Char next = *definition++;
     230                if (next == '-')
     231                {
     232                    next = *definition++;
     233                    if (next == 0)
     234                    {
     235                        ptr->set(CharSetClass::tolower(ch));
     236                        ptr->set(CharSetClass::tolower('-'));
     237                        ptr->set(CharSetClass::toupper(ch));
     238                        ptr->set(CharSetClass::toupper('-'));
     239                        break;
     240                    }
     241                    ptr->set(CharSetClass::tolower(ch)
     242                      , CharSetClass::tolower(next));
     243                    ptr->set(CharSetClass::toupper(ch)
     244                      , CharSetClass::toupper(next));
     245                }
     246                else
     247                {
     248                    ptr->set(CharSetClass::tolower(ch));
     249                    ptr->set(CharSetClass::toupper(ch));
     250                }
     251                ch = next;
     252            }
     253        }
     254
    246255        boost::shared_ptr<detail::basic_chset<Char> > ptr;
    247256    };
  • trunk/boost/spirit/home/support/component.hpp

    r44358 r44569  
    192192    {
    193193        template <
    194             typename Domain, typename Expr, typename State = unused_type, 
     194            typename Domain, typename Expr, typename State = unused_type,
    195195            typename Visitor = unused_type
    196196        >
     
    209209        // special case for arrays
    210210        template <
    211             typename Domain, typename T, int N, 
     211            typename Domain, typename T, int N,
    212212            typename State, typename Visitor>
    213213        struct as_component<Domain, T[N], State, Visitor>
     
    244244    as_component(Domain, Expr const& xpr, State const& state, Visitor& visitor)
    245245    {
    246         typedef typename 
    247             result_of::as_component<Domain, Expr, State, Visitor>::grammar 
     246        typedef typename
     247            result_of::as_component<Domain, Expr, State, Visitor>::grammar
    248248        grammar;
    249249        return grammar()(proto::as_expr(xpr), state, visitor);
     
    272272        template <
    273273            typename Domain, typename Director
    274           , typename Elements, typename Modifier>
     274          , typename Elements, typename Modifier, typename Enable = void>
    275275        struct make_component
    276276          : mpl::identity<component<Domain, Director, Elements> >
Note: See TracChangeset for help on using the changeset viewer.