On Sunday, 30 June 2013 at 11:07:24 UTC, Tyro[17] wrote:
What is the equivalent of memcpy

module memcopy;

immutable ADDRESS_BUS_SIZE = 20; // 2^20 address bus
byte memory[1 << ADDRESS_BUS_SIZE];

void main()
{
        ushort val = 12345;

        for (int i = 0x12340; i < 0x1234A; i+= 2) {
                memcpy (&memory[i], &val, sizeof val); // D way???
                val++;
        }

        for (int i = 0x12340; i < 0x1234A; i+= 2) {
                memcpy (&val, &memory[i], sizeof val); // D way???
                writefln("%x", val);
        }
}

achieved in D? I am trying not to use memcpy or any function from the C API.

Thanks,

You could do it with ubyte a vector copy:

--------
void * dmemcpy ( void * destination, const void * source, size_t num ) pure nothrow
{
(cast(ubyte*)destination)[0 .. num][]=(cast(const(ubyte)*)source)[0 .. num];
    return destination;
}
--------

Doing it this way has the advantage of being CTFE-able, and (potentially) faster, as everything I ever read about D's memcpy is that it is slow.

Reply via email to