Suggestion: dynamic array operations
Nikita Kalaganov
sapfirnik at rambler.ru
Wed Sep 6 09:04:29 PDT 2006
1. Pop from array on front/back
Syntax:
ARRAY1 = ARRAY2 <<< INTEGER
ARRAY1 <<<= INTEGER
ARRAY1 = ARRAY2 >>> INTEGER
ARRAY1 >>>= INTEGER
Example:
int[] a;
// let a = [1,2,3,4,5]
int[] b;
b = a <<< 4; // b = [1,2,3,4] a = [5]
b = a >>> 4; // b = [2,3,4,5] a = [1]
a <<<= 3; // a = [1,2,3]
a >>>= 1; // a = [3]
2. Array rotation
Syntax:
ARRAY1 = ARRAY2 ral INTEGER
ARRAY1 ral= INTEGER
ARRAY1 = ARRAY2 rar INTEGER
ARRAY1 rar= INTEGER
Example:
int[] a;
// let a = [1,2,3,4,5]
b = a ral 2; // b = [3,4,5,1,2]
b = a rar 2; // b = [4,5,1,2,3]
a ral= 2; // a = [3,4,5,1,2]
a rar= 4; // a = [4,5,1,2,3]
3. Shift array left/right
Syntax:
ARRAY1 = ARRAY2 << {ARRAY3 | INTEGER}
ARRAY1 <<= {ARRAY2 | INTEGER}
ARRAY1 = ARRAY2 >> {ARRAY3 | INTEGER}
ARRAY1 >>= {ARRAY2 | INTEGER}
Example ('di' means default initializer):
int[] a;
// let a = [1,2,3,4,5]
int[] b;
// let b = [6,7];
int[] c;
c = a << 3; // c = [4,5,di,di,di]
c = a << b; // c = [3,4,5,6,7]
c = a >> 3; // c = [di,di,di,1,2]
c = a >> b; // c = [6,7,1,2,3]
a <<= 2; // a = [3,4,5,di,di]
a <<= b; // a = [5,di,di,6,7]
a >>= 2; // a = [di,di,5,di,0]
a >>= b; // a = [6,7,di,di,5]
------------
Together with concatenation, these operations give us in-built standard
containers like queue and deque (goodbye templates!). Also, they ease
implementation of various algorithms with matrix operations.
P.S. Hmm, maybe it's a good idea to add rotation operations for _unsigned_
integers ?
Syntax & example:
uint a;
a = 0x000ff000;
a rol= 4; // a = 0x00ff0000
a ror= 20; // a = 0xf000000f
More information about the Digitalmars-d
mailing list