Passing a ubyte[] to a function taking a 'ref ubyte[16]'

simendsjo simendsjo at gmail.com
Sat Jun 23 11:38:51 PDT 2012


On Sat, 23 Jun 2012 20:33:09 +0200, simendsjo <simendsjo at gmail.com> wrote:

> On Sat, 23 Jun 2012 20:23:26 +0200, Johannes Pfau <nospam at example.com>  
> wrote:
>
>> So how to pass a ubyte[] to a function expecting a ref ubyte[16]
>> without allocating/using any extra memory (Not even stack)?
>> This seems to work, but it's very ugly:
>> ------------
>> _digest.finish(*cast(ubyte[16]*)buf.ptr);
>> ------------
>> I thought this might create a temporary, but it passes all unittests,
>> so it seems to work?
>
> I don't have a clue, but the following seems to work as well :)
>
> void sarr(ref ubyte[1] a) {
>      darr(a.ptr[0..a.length]);
> }
>
> void darr(ubyte[] a) {
>      a[0] = 2;
> }
>
> void main() {
>      ubyte[1] a = [1];
>      sarr(a);
>      assert(a[0] == 2);
> }

Oops.. Just saw it should have been the other way around. Never mind me


More information about the Digitalmars-d-learn mailing list