I'd like to add the following to std.conv, to enable parse!bool(string)
and to!bool(string).  This will fix bug 3386 (and to some extent 1733
and 3223).  It will also require a minor change to std.string.icmp(),
shown at the bottom.  Objections?


// std.conv:
Target parse(Target, Source)(ref Source s)
    if (isSomeString!Source && is(Target==bool))
{
    if (s.length >= 4 && icmp(s[0 .. 4], "true")==0)
    {
        s = s[4 .. $];
        return true;
    }
    if (s.length >= 5 && icmp(s[0 .. 5], "false")==0)
    {
        s = s[5 .. $];
        return false;
    }
    conv_error!(Source, Target)(s);
    assert(0);
}


unittest
{
    auto t = "TrueType";
    assert (parse!bool(t) == true);
    assert (t == "Type");

    auto f = "False killer whale";
    assert (parse!bool(f) == false);
    assert (f == " killer whale");

    try {
        auto m = "maybe?";
        parse!bool(m);
        assert(false);
    }
    catch(ConvError e) { }
}


// std.string, line 137:
-   int icmp(in char[] s1, in char[] s2)
+   int icmp(C1, C2)(in C1[] s1, in C2[] s2)


_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to