[Issue 10717] std.ascii.toLower and toUpper should return char instead of dchar and avoid me to use a bad cast(char)

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Jul 31 12:27:00 PDT 2013


http://d.puremagic.com/issues/show_bug.cgi?id=10717



--- Comment #7 from monarchdodra at gmail.com 2013-07-31 12:26:58 PDT ---
(In reply to comment #6)
> So a call to toLower can cause two function calls. toLower() is a tiny function
> that could be called many many times, so perhaps in debug mode (without
> inlining) doubling the number of function calls slows down the user code a bit.

Well, it can cause two function calls only for user defined types, so the case
should not be that common. Doing it this way means you'll only end up
instanciating `toLower!dchar` for all user types. Which is also a plus.

One of the implementation I had suggested was:

////--------
//Public template that only filters and changes return type
auto toUpper(C)(C c) @safe pure nothrow
    if (is(C : dchar))
out(result)
{
    assert(!isLower(result));
}
body
{
    alias Ret = Select!(isScalarType!C, C, dchar);
    return cast(Ret) toUpperImpl(c);
}

//Non template that does actual job.
private dchar toUpperImpl(dchar c) @safe pure nothrow
{
    return isLower(c) ? cast(dchar)(c - ('a' - 'A')) : c;
}
////--------

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list