Variable length arrays under -betterC?

user456 user456 at 123.de
Mon Apr 17 19:12:20 UTC 2023


On Monday, 17 April 2023 at 18:34:19 UTC, DLearner wrote:
> Requirement is to write some D code (which avoids the GC), that 
> will be called from C.
> So simple approach seemed to be to write D code under -betterC 
> restrictions.
>
> However, also need variable length arrays - but D Dynamic 
> Arrays not allowed under -betterC.
> [...]
> Any ideas how to implement variable length arrays under 
> -betterC?

You need a struct with operator overloads and libc realloc(), 
(very) basically

```d
struct Array(T)
{
private:

     struct Payload
     {
         T* ptr;
         size_t length;
     }

     Payload p;

public:

     size_t length() {
         return p.length;
     }

     void length(size_t v) {
         import core.stdc.stdlib;
         p.ptr = cast(T*) realloc(p.ptr, v * T.sizeof);
     }

     ref T opIndex(size_t i) {
         return p.ptr[i];
     }
}

void main()
{
     Array!int a;
}
```

but you'll have to implement

- ctors
- concat assign
- slice assign
- copy construction
- value type elem alignment
- default elem construction
- default elem destruction
- etc.

to make that usable in on trivial cases.

Maybe try to find an already existing one;

https://github.com/gilzoide/betterclist
https://github.com/aferust/dvector
(maybe more in https://code.dlang.org/search?q=betterc)


More information about the Digitalmars-d-learn mailing list