On Fri, Dec 8, 2023 at 1:37 PM John Naylor <johncnaylo...@gmail.com> wrote: > > On Fri, Dec 8, 2023 at 8:57 AM Masahiko Sawada <sawada.m...@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