Date: prev next · Thread: first prev next last
2015 Archives by date, by thread · List index


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].

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.