Ticket #8597: ticket-8597.patch

File ticket-8597.patch, 3.7 KB (added by Michael Powell <mwpowellhtx@…>, 9 years ago)

Tentative patch to the utree itself

  • boost/spirit/home/support/utree/detail/utree_detail2.hpp

     
    469469                case type::int_type:
    470470                    return f(x.i);
    471471
     472                case type::float_type:
     473                    return f(x.f);
     474
    472475                case type::double_type:
    473476                    return f(x.d);
    474477
  • boost/spirit/home/support/utree/utree.hpp

     
    8080            // numeric atoms
    8181            bool_type,          // An utree holding a boolean value
    8282            int_type,           // An utree holding a integer (int) value
     83            float_type,         // An utree holding a floating point (float) value
    8384            double_type,        // An utree holding a floating point (double) value
    8485
    8586            // text atoms (utf8)
     
    108109            case utree_type::function_type: { out << "function"; break; }
    109110            case utree_type::bool_type: { out << "bool"; break; }
    110111            case utree_type::int_type: { out << "int"; break; }
     112            case utree_type::float_type: { out << "float"; break; }
    111113            case utree_type::double_type: { out << "double"; break; }
    112114            case utree_type::string_type: { out << "string"; break; }
    113115            case utree_type::string_range_type: { out << "string_range"; break; }
     
    398400        reference operator=(unsigned int);
    399401        reference operator=(int);
    400402
     403        // This initializes a `float_type` node, which can hold arbitrary
     404        // floating point (float) values.
     405        utree(float);
     406        reference operator=(float);
     407
    401408        // This initializes a `double_type` node, which can hold arbitrary
    402409        // floating point (double) values.
    403410        utree(double);
     
    598605            detail::void_ptr v;
    599606            bool b;
    600607            int i;
     608            float f;
    601609            double d;
    602610            utree* p;
    603611            function_base* pf;
  • boost/spirit/home/support/utree/utree_traits.hpp

     
    901901    };
    902902
    903903    template <>
     904    struct compute_compatible_component_variant<utree, float>
     905      : mpl::true_
     906    {
     907        typedef float compatible_type;
     908
     909        static bool is_compatible(int d)
     910        {
     911            return d == utree_type::float_type;
     912        }
     913    };
     914
     915    template <>
    904916    struct compute_compatible_component_variant<utree, double>
    905917      : mpl::true_
    906918    {
     
    11221134    };
    11231135
    11241136    template <>
     1137    struct extract_from_container<utree, float>
     1138    {
     1139        typedef float type;
     1140
     1141        template <typename Context>
     1142        static type call(utree const& t, Context&)
     1143        {
     1144            return detail::get_or_deref<float>(t);
     1145        }
     1146    };
     1147
     1148    template <>
    11251149    struct extract_from_container<utree, double>
    11261150    {
    11271151        typedef double type;
     
    12191243    };
    12201244
    12211245    template <>
     1246    struct transform_attribute<utree const, float, karma::domain>
     1247    {
     1248        typedef float type;
     1249
     1250        static type pre(utree const& t)
     1251        {
     1252            return detail::get_or_deref<float>(t);
     1253        }
     1254    };
     1255
     1256    template <>
    12221257    struct transform_attribute<utree const, double, karma::domain>
    12231258    {
    12241259        typedef double type;