On Sunday, 8 February 2015 at 22:45:14 UTC, Elie Morisse wrote:
On Sunday, 8 February 2015 at 20:56:31 UTC, Syro wrote:
That is really cool.

Thanks, just got that tangled mess of templates that is std::string working too:
On Sunday, 8 February 2015 at 22:45:14 UTC, Elie Morisse wrote:
On Sunday, 8 February 2015 at 20:56:31 UTC, Syro wrote:
That is really cool.

Thanks, just got that tangled mess of templates that is std::string working too:

Hey Elie, this is great stuff, as usual. I have written a test file for bitset here also (including a couple failures I am sure you are aware of, but others might want to see what works and what doesn't).


/**
 * std::bitset example.
 *
 * Build with:
 *   $ ldc2 -L-lstdc++ bitset.d
 */

modmap (C++) "bitset";

import std.stdio;
import (C++) std.bitset;

void main()
{
    enum : ulong { A=0, B, C, D, E, F, G, H, numColors };
    auto usedColors = new bitset!(numColors);

    usedColors.set(A, true);
    usedColors.set(C, true);

writeln("usedColors.len=\t", numColors); // '8' as it should be
    write("usedColors = \t");
    if (usedColors.any())                      // any() works
    {
for(int i=0; i<usedColors.size; i++) // size seems to work
            if (usedColors.test(i))            // works
                write('1');
            else
                write('0');
        write('\n');           // prints 10100000 for usedColors
} // seems backwards also see 'b' below
                               // is this right?

writeln("C bit = \t", usedColors.test(C)); // true as it should be writeln("count = \t", usedColors.count()); // seems like count is // working...returns 2 writeln("as ulong = \t", usedColors.to_ulong); // '5' is correct

    writeln("all = \t\t", usedColors.all);
    writeln("none = \t\t", usedColors.none);        // these work
    writeln("any = \t\t", usedColors.any);

    usedColors.flip(C);
writeln("C flipped = \t", usedColors.test(C)); // false as appropriate

    write("b = \t\t");
    auto a = new bitset!(4u)(0b0110);
    auto b = new bitset!(4u)(0b1101);
    for(int i=0; i<b.size; i++)        // size seems to work
    {
        if (b.test(i))
            write('1'); // prints out 1011 for 'b'
        else
            write('0');
    }
    write('\n');
    writeln("b as ulong = \t", b.to_ulong); // '13' is correct

// FAILURE in phobos format.d
//    writeln(b);

// FAILURE because the [] operator isn't recognised
//    writeln(usedColors[C]);

// FAILURE on operators again
//    auto d = a&b;

}

Thanks,
Kelly

Reply via email to