tree 2444765a67cece718f3c0589562cd397822fe2bd
parent 0746c98c8b0ed9ee291c17f56d256be69796317d
author luigi-rosso <hello@rive.app> 1663631577 +0000
committer luigi-rosso <hello@rive.app> 1663631577 +0000

Implement a dynamic array (simple vector for marshaling).

While working on marshaling the RenderFont abstraction to Dart FFI and WASM, it became clear that dealing with vectors inside of vectors gets tricky.

We can wrap one single vector into a return struct like:
```
struct EasyToMarshal {
  std::vector<float>* ptrToVector;
  float* dataInVector;
  size_t size;
};
```
This is what we currently do and FFI/WASM is expected to then call in to C++ to delete ptrToVector when it's done with the data.

This gets problematic to do when ptrToVector contains types that internally contain more vectors. The size and memory layout of vector isn't guaranteed across platforms with different STL implementations.

The result from the shaper was a vector of RenderGlyphRuns:
```
struct RenderGlyphRun {
    rcp<RenderFont> font;
    float size;

    std::vector<GlyphID> glyphs;       // [#glyphs]
    std::vector<uint32_t> textOffsets; // [#glyphs]
    std::vector<float> xpos;           // [#glyphs + 1]
};

std::vector<RenderGlyphRun> shapeText(...){}
```

This PR introduces a DynamicArray (totally up for renaming this to something less lame) which makes it really easy to marshal DynamicArrays inside of other DynamicArrays as we know the memory layout is just like rive::Span (a pointer and a size).

Separately, this does make me wonder if we should use uint64_t for size in DynamicArrays so we can guarantee those are always 64 bit (the FFI and WASM tooling doesn't make it easy to marhsal runtime determined sizes).

Diffs=
e62737cf9 include cstring for memcpy
468dd3a2b Add growToFit, assert we didn’t overflow size_t, and in place constructor calls
f0947d32f Add realloc down to actual used size from capacity.
516d0fc12 Move resize to builder and rename to simple array.
091904d22 malloc/realloc version
e574043f7 More windows fixes
c1f5b96ec Fix windows compiler warning.
164911445 Implement a dynamic array (simple vector for marshaling).
