Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/AST/Node.hpp

    r2d11663 r60aaa51d  
    9999
    100100/// Mutate a node field (only clones if not equal to existing value)
    101 template<typename node_t, typename field_t, typename assn_t>
    102 const node_t * mutate_field( const node_t * node, field_t node_t::* field, assn_t && val ) {
    103         // skip mutate if equivalent
     101template<typename node_t, typename field_t>
     102const node_t * mutate_field(
     103        const node_t * node,
     104        typename std::remove_const<typename std::remove_reference<field_t>::type>::type node_t::* field,
     105        field_t&& val
     106) {
    104107        if ( node->*field == val ) return node;
    105108       
    106         // mutate and return
    107109        node_t * ret = mutate( node );
    108         ret->*field = std::forward< assn_t >( val );
    109         return ret;
    110 }
    111 
    112 /// Mutate a single index of a node field (only clones if not equal to existing value)
    113 template<typename node_t, typename coll_t, typename ind_t, typename field_t>
    114 const node_t * mutate_field_index(
    115         const node_t * node, coll_t node_t::* field, ind_t i, field_t && val
    116 ) {
    117         // skip mutate if equivalent
    118         if  ( (node->*field)[i] == val ) return node;
    119 
    120         // mutate and return
    121         node_t * ret = mutate( node );
    122         (ret->*field)[i] = std::forward< field_t >( val );
     110        ret->*field = std::forward< field_t >( val );
    123111        return ret;
    124112}
Note: See TracChangeset for help on using the changeset viewer.