digitalmars.D.learn - void[] or ubyte[] ?
- derick_eddington nospam.dot.yahoo.dot.com (9/9) Mar 27 2005 This probably has been asked before... but maybe other new people will l...
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= (6/13) Mar 28 2005 void[] is good for binary storage, *unless* you want to index it...
- Lionello Lunesu (12/29) Mar 30 2005 But.. What does .length mean for a void[]?
- Regan Heath (37/72) Mar 31 2005 IIRC Walter once admitted that void.sizeof was equal to 1 and that was
This probably has been asked before... but maybe other new people will learn too. I've been coding stuff that involves a lot of raw bytes-as-basic-storage-unit and wondering about using void[] vs ubyte[]. Technically, a ubyte is an 8-bit unsigned integer while a void[] element is a unit of the address-space i.e. an 8-bit block, right? For byte-storage-unit usage they're functionally the same? So what is the correct one to use when you want to deal with blocks/streams of the computer's basic storage unit, the 8-bit byte? I've been using void[] but I've seen ubyte[] used a lot as well.
Mar 27 2005
derick_eddington wrote:I've been coding stuff that involves a lot of raw bytes-as-basic-storage-unit and wondering about using void[] vs ubyte[]. Technically, a ubyte is an 8-bit unsigned integer while a void[] element is a unit of the address-space i.e. an 8-bit block, right? For byte-storage-unit usage they're functionally the same? So what is the correct one to use when you want to deal with blocks/streams of the computer's basic storage unit, the 8-bit byte? I've been using void[] but I've seen ubyte[] used a lot as well.void[] is good for binary storage, *unless* you want to index it... I've been using ubyte[] for storing 8-bit character encodings, but for storing something like raw binary data - one might as well use void[] ? So ubyte[] is good for what used to be (char*), and void[] for (void*) --anders
Mar 28 2005
But.. What does .length mean for a void[]? for all other arrays, .length is the number of elements: for int[] the number of ints, for byte[] the number of bytes, for void the number of voids?? If you want .length to mean 'number of bytes', why not use byte[]? void* does not have this problem: it's simply a handle to something, but void[] makes no sense: you know what it contains or else you wouldn't know how many of 'em you had?! Why is void[] even allowed? Please enlighten me. Lionello. <derick_eddington nospam.dot.yahoo.dot.com> wrote in message news:d282dn$svc$1 digitaldaemon.com...This probably has been asked before... but maybe other new people will learn too. I've been coding stuff that involves a lot of raw bytes-as-basic-storage-unit and wondering about using void[] vs ubyte[]. Technically, a ubyte is an 8-bit unsigned integer while a void[] element is a unit of the address-space i.e. an 8-bit block, right? For byte-storage-unit usage they're functionally the same? So what is the correct one to use when you want to deal with blocks/streams of the computer's basic storage unit, the 8-bit byte? I've been using void[] but I've seen ubyte[] used a lot as well.
Mar 30 2005
IIRC Walter once admitted that void.sizeof was equal to 1 and that was
required for void[] to work. You're asking why void[] is required.. the
only answer I have is this:
import std.stdio;
void foov(void[] a) {}
void fooi(int[] a) {}
void foos(short[] a) {}
void foob(byte[] a) {}
void main()
{
int[] iarr;
short[] sarr;
byte[] barr;
writefln(void.sizeof);
foov(iarr); //ok
foov(sarr); //ok
foov(barr); //ok
fooi(iarr); //ok
fooi(sarr); //error
fooi(barr); //error
foos(iarr); //error
foos(sarr); //ok
foos(barr); //error
foob(iarr); //error
foob(sarr); //error
foob(barr); //ok
}
it appears to me that void[] is different to byte[] in one particular way,
every array type (that I've tested anyway) is implicitly castable to
void[].
My question is, if this is the reason for void[], is there a reason byte[]
couldn't have this special behaviour instead?
Regan
On Thu, 31 Mar 2005 09:39:44 +0300, Lionello Lunesu
<lio lunesu.removethis.com> wrote:
But.. What does .length mean for a void[]?
for all other arrays, .length is the number of elements: for int[] the
number of ints, for byte[] the number of bytes, for void the number of
voids??
If you want .length to mean 'number of bytes', why not use byte[]? void*
does not have this problem: it's simply a handle to something, but void[]
makes no sense: you know what it contains or else you wouldn't know how
many
of 'em you had?!
Why is void[] even allowed? Please enlighten me.
Lionello.
<derick_eddington nospam.dot.yahoo.dot.com> wrote in message
news:d282dn$svc$1 digitaldaemon.com...
This probably has been asked before... but maybe other new people will
learn
too.
I've been coding stuff that involves a lot of raw
bytes-as-basic-storage-unit
and wondering about using void[] vs ubyte[]. Technically, a ubyte is an
8-bit
unsigned integer while a void[] element is a unit of the address-space
i.e. an
8-bit block, right? For byte-storage-unit usage they're functionally
the
same?
So what is the correct one to use when you want to deal with
blocks/streams of
the computer's basic storage unit, the 8-bit byte? I've been using
void[]
but
I've seen ubyte[] used a lot as well.
Mar 31 2005









=?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb algonet.se> 