Setting a hard limit on slice size, is this possible?
Tejas
notrealemail at gmail.com
Fri Aug 6 17:16:28 UTC 2021
On Friday, 6 August 2021 at 16:32:59 UTC, james.p.leblanc wrote:
> On Friday, 6 August 2021 at 11:58:59 UTC, Paul Backus wrote:
>> struct MySlice(T, size_t maxLength)
>> {
>> private T[] payload;
>> invariant(payload.length <= maxLength);
>> this(T[] slice) { payload = slice; }
>> T opIndex(size_t i) { return payload[i]; }
>> // etc.
>> }
> ```
>
> Paul,
>
> Thanks very much for your reply. I understand only
> a fraction of the suggested solution. I will need to
> digest this a bit, and do some more background reading
> on templates.
>
> My initial, naive attempts to use this in a simple main()
> were unsuccessful. I'll keep plugging at it ...
>
> Best Regards,
> James
If you want something even simpler, maybe this could help:
```d
void setCapacity(int/*or whatever type you want*/ a[], ulong
capacity){
assert(capacity < 100/*whatever you want to set*/);
a.length = capacity;
}
void main(){
int[] arr;
setCapacity(arr, 50);//works :D
//setCapacity(arr, 1000);// fails :(
}
```
Of course, this won't work if you want to resize the capacity
natively, ie, by using ```.length``` directly; then you will have
to use Paul's solution.
If you still have difficulties, please ping.
Also, if you're completely new, please try the book "programming
in D", it is a marvellous resource.
link:
http://ddili.org/ders/d.en/
More information about the Digitalmars-d-learn
mailing list