On Fri, Dec 8, 2023 at 1:37 PM John Naylor <johncnaylorls@gmail.com> wrote:
>
> On Fri, Dec 8, 2023 at 8:57 AM Masahiko Sawada <sawada.mshk@gmail.com> wrote:
>
> > It's still unclear to me why the value doesn't need to contain the size.
> >
> > If I understand you correctly, in RT_GET(), the tree allocs a new
> > memory and updates the slot where the value is embedded with the
> > pointer to the allocated memory, and returns the pointer to the
> > caller. Since the returned value, newly allocated memory, is still
> > empty, the callner needs to copy the contents of the old value to the
> > new value and do whatever else it needs to.
> >
> > If the value is already a single-leave value and RT_GET() is called
> > with a larger size, the slot is always replaced with the newly
> > allocated area and the caller needs to copy the contents? If the tree
> > does realloc the value with a new size, how does the tree know the new
> > value is larger than the existing value? It seems like the caller
> > needs to provide a function to calculate the size of the value based
> > on the length.
>
> Right. My brief description mentioned one thing without details: The
> caller would need to control whether to re-alloc. RT_GET would pass
> the size. If nothing is found, the tree would allocate. If there is a
> value already, just return it. That means both the address of the
> slot, and the local pointer to the value (with embedded, would be the
> same address). The caller checks if the array is long enough. If not,
> call a new function that takes the new size, the address of the slot,
> and the pointer to the old value. The tree would re-alloc, put the
> alloc pointer in the slot and return the new local pointer. But as we
> agreed, that is all follow-up work.
Thank you for the detailed explanation. That makes sense to me. We
will address it as a follow-up work.
Regards,
--
Masahiko Sawada
Amazon Web Services: https://aws.amazon.com