Example #1
0
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;
  }
}
Example #2
0
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;
  }
}
Example #3
0
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);
}
Example #4
0
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);
}