ArrayData* StructArray::PlusEq(ArrayData* ad, const ArrayData* elems) { auto structArray = asStructArray(ad); auto const neededSize = structArray->size() + elems->size(); auto const mixedArray = ToMixedCopyReserve(structArray, neededSize); try { auto const ret = MixedArray::PlusEq(mixedArray, elems); assert(ret == mixedArray); assert(mixedArray->hasExactlyOneRef()); return ret; } catch (...) { MixedArray::Release(mixedArray); throw; } }
ArrayData* PackedArray::PlusEq(ArrayData* adIn, const ArrayData* elems) { assert(checkInvariants(adIn)); auto const neededSize = adIn->size() + elems->size(); auto const mixed = ToMixedCopyReserve(adIn, neededSize); try { auto const ret = MixedArray::PlusEq(mixed, elems); assert(ret == mixed); assert(!mixed->hasMultipleRefs()); return ret; } catch (...) { MixedArray::Release(mixed); throw; } }
ArrayData* StructArray::Merge(ArrayData* ad, const ArrayData* elems) { auto structArray = asStructArray(ad); auto const neededSize = structArray->m_size + elems->size(); auto const mixedArray = ToMixedCopyReserve(structArray, neededSize); return MixedArray::ArrayMergeGeneric(mixedArray, elems); }
ArrayData* PackedArray::Merge(ArrayData* adIn, const ArrayData* elems) { assert(checkInvariants(adIn)); auto const neededSize = adIn->m_size + elems->size(); auto const ret = ToMixedCopyReserve(adIn, neededSize); return MixedArray::ArrayMergeGeneric(ret, elems); }