Am Sun, 30 Jun 2013 07:07:23 -0400 schrieb "Tyro[17]" <rid...@yahoo.com>:
> 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, While they are in the C stdlib, there is nothing really C specific about them. Just use them. In your case GCC would recognize a memcpy call with known length (2 bytes) and inline the call. From there I guess the optimizer can figure something out that runs fast. That said how about this in D: ushort val = 12345; for (int i = 0x12340; i < 0x1234A; i+= 2) *cast(ushort*) &memory[i] = val++; for (int i = 0x12340; i < 0x1234A; i+= 2) { val = *cast(ushort*) &memory[i] writefln("%04x", val); } -- Marco