[phobos] string-to-bool conversions in std.conv

Lars Tandle Kyllingstad lars at kyllingen.net
Mon Jun 14 06:13:45 PDT 2010


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)




More information about the phobos mailing list