data mapping, more elegant solution?
    Mike 
    vertex at gmx.at
       
    Thu Dec 13 06:46:28 PST 2007
    
    
  
On Thu, 13 Dec 2007 14:43:51 +0100, mandel <oh at no.es> wrote:
> On Thu, 13 Dec 2007 13:35:35 +0000, Regan Heath wrote:
>> Use a union?
>>
>> union thing
>> {
>>    ubyte[8] ub;
>>    uint     ui;
>> }
>>
>> void main()
>> {
>>    thing a;
>>    a.ui = 42;
>> }
>>
> This way I can't insert data at arbitrary places, e.g. array[4..8].
> I also would have to cast thing to ubyte[8] when I pass it to functions.
> It's also hackish. :P
Then pack the hackish things away into something:
struct thing
{
     union
     {
         ubyte[8] ub;
         uint ui;
     }
     void opAssign(uint value)
     {
         ui = value;
     }
     uint opCall()
     {
         return value;
     }
     void opIndexAssign(byte value, uint idx)
     {
         ub[idx] = value;
     }
     byte opIndex(uint idx)
     {
         return ub[idx];
     }
}
Better? You can pass that to functions. For arbitrary places you're either  
stuck with the casting or you maybe can do something with opSlice.
-Mike
-- 
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
    
    
More information about the Digitalmars-d-learn
mailing list