Slicing upward

Paul Backus snarwin at gmail.com
Sat Sep 14 18:08:56 UTC 2019


On Saturday, 14 September 2019 at 11:34:35 UTC, Brett wrote:
> I have an algorithm that is most efficiently implement by 
> taking an array and slicing it upward, meaning removing the 
> leading elements.
>
> Because the algorithm is complex(deterministic but chaotic) and 
> deals with multiple arrays it is difficult to efficiently use 
> slicing.
>
> Is there some easy way to take an array and slice it in a way 
> that as the array grows any slices will "shift".

No, there is no easy way to do this. You will have to implement 
your own "slice" type that keeps a reference to the original 
array it was taken from. For example:

struct UpwardSlice(T)
{
     private T[]* source;
     private size_t offset;

     this(ref T[] source, size_t offset = 0)
     {
         this.source = &source;
         this.offset = offset;
     }

     T opIndex(size_t i)
     {
         return (*source)[offset + i];
     }

     T[] opIndex()
     {
         return (*source)[offset .. $];
     }

     @property size_t length()
     {
         return (*source).length - offset;
     }
}




More information about the Digitalmars-d-learn mailing list