Suggestion: dynamic array operations

Chris Nicholson-Sauls ibisbasenji at gmail.com
Wed Sep 6 12:13:37 PDT 2006


Nikita Kalaganov wrote:
> 
> 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]

T[] pull (T) (T[] src, size_t len) {
   T[] result ;

   len    = len >= src.length ? src.length : len + 1;
   result = src[0 .. len];
   src    = src[len .. src.length];

   return result;
}

T[] rpull (T) (T[] src, size_t len) {
   T[] result ;

   len    = len >= src.length ? src.length : len + 1;
   result = src[src.length - len .. src.length];
   src    = src[0 .. len];

   return result;
}

int[] a ;
int[] b ;
a = array!(int)(1, 2, 3, 4, 5);

b = a.pull(4); // a == [5], b == [1, 2, 3, 4]

b = a.rpull(4); // a == [1], b == [2, 3, 4, 5]


This is precisely why I say we need an array utils module in Phobos.  I have one in 
progress in my Cashew project, but it is incomplete and could use updating now that D's 
import system has been improved.

-- Chris Nicholson-Sauls



More information about the Digitalmars-d mailing list