More D newb questions.

Me Here p9e883002 at sneakemail.com
Mon May 5 06:32:02 PDT 2008


Hi all,

I getting error message from the following code that I do not know how to
interpret.
(Please don't critique the code. Its just an exercise :)

char[4] table[65536];

void buildTable() {
    char[] abcd = "abcd";
    
    for( ushort b1 = 0; b1 < 4; b1++ ) {
        for( ushort b2 = 0; b2 < 4; b2++ ) {
            for( ushort b3 = 0; b3 < 4; b3++ ) {
                for( ushort b4 = 0; b4 < 4; b4++ ) {
                    for( ushort b5 = 0; b5 < 4; b5++ ) {
                        for( ushort b6 = 0; b6 < 4; b6++ ) {
                            for( ushort b7 = 0; b7 < 4; b7++ ) {
                                for( ushort b8 = 0; b8 < 4; b8++ ) {
                                    table[ 
                                        ( b1 << 14 ) | ( b2 << 12 ) | 
                                        ( b3 << 10 ) | ( b4 <<  8 ) |
                                        ( b5 <<  6 ) | ( b6 <<  4 ) | 
                                        ( b7 <<  2 ) | b8
/* line 88 */                       ] = abcd[ b1 ] ~ abcd[ b2 ] ~ abcd[ b3 ] ~
abcd[ b4 ]
                                      ~ abcd[ b5 ] ~ abcd[ b6 ] ~ abcd[ b7 ] ~
abcd[ b8 ];
                                   
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

The errors:
c:\dmd\test>dmd -O -inline count2Bit.d
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)
count2Bit.d(88): Error: Can only concatenate arrays, not (int ~ int)

count2Bit.d(88): Error: cannot assign to static array table[
    cast(uint)( cast(int)b1 << 14 | cast(int)b2 << 12 | cast(int)b3 << 10 |
cast(int)b4 << 8 |
    cast(int)b5 << 6 | cast(int)b6 << 4 | cast(int)b7 << 2 | cast(int)b8)
]

Why does D think I'm trying to concatenate ints, when teh only expressions
involving catenation are
slices of char[] abcd?

Why is D casting my carefully specified ushorts to ints when doing
bit-twiddling?
I am specifically trying to avoid signed operations. Even promotion to uints
would seem
unnecessary, but its?

Finally, is it possible to populate a static lookup table at runtime? 
Or should I just return a ref to the table and assignit to a const pointer in
the caller stack?

Cheers, b.
-- 




More information about the Digitalmars-d mailing list