Passing a ubyte[] to a function taking a 'ref ubyte[16]'
    Johannes Pfau 
    nospam at example.com
       
    Sun Jun 24 00:29:24 PDT 2012
    
    
  
Am Sat, 23 Jun 2012 23:39:00 -0700
schrieb Ali Çehreli <acehreli at yahoo.com>:
> On 06/23/2012 04:51 PM, Jonathan M Davis wrote:
> 
>  >> 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 believe that that will work, but it's definitely ugly. However,
>  > if 
> you do
>  > that, you _need_ to put an assertion about the length of buf in
>  > there, otherwise, you could be using memory from past the end of
>  > buf.
>  >
>  > - Jonathan M Davis
> 
> I had the following function template in a message that did not
> appear on the newsgroup:
> 
> ref T[N] asArray(size_t N, T)(ref T[] source)
> {
>      enforce(source.length >= N);
>      return *cast(T[N]*)source.ptr;
> }
> 
> // ...
> 
>      foo(asArray!16(b));
> 
> Ali
> 
Yes that's better. Could this be added to phobos, probably
std.typecons?
    
    
More information about the Digitalmars-d-learn
mailing list