On 01/19/2015 10:52 PM, julien2412 wrote:
However, I'm not sure to understand.
I mean, I thought there were mere array (like in C) with fixed size and
vector or other dynamic containers.

The idea is to allocate only a single block of memory for the fixed-size "head" of the struct plus the dynamically-sized "tail," by doing something like

  OStoreBTreeNodeData * p = reinterpret_cast<OStoreBTreeNodeData *>(
    new char[
      offsetof(OStoreBTreeNodeData, m_pData) + k * sizeof(T)]);

That trick is used in quite a number of places across the LO codebase, the most prominent example being rtl_uString underlying OUString.

I don't know what you mean by "flexible array member" but above all what
about if "n" (so  capacityCount()) is 1?
m_pData[1] would be out of bounds, wouldn't it?

if n is 1, the body of the loop

  for (sal_uInt16 i = 1; i < n; i++)

will be executed zero times, so there would not be any access to out-of-bounds m_pData[1].
_______________________________________________
LibreOffice mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/libreoffice

Reply via email to