void * ProxyArray::elementToData(TypedValue * tv) const { if (!tv) { return nullptr; } if (hasZvalValues()) { zBoxAndProxy(tv); return (void*)(&tv->m_data.pref); } else { always_assert(tv->m_type == KindOfResource); ZendCustomElement * elt = dynamic_cast<ZendCustomElement*>(tv->m_data.pres); always_assert(elt); return elt->data(); } }
void ProxyArray::proxyAppend(void* data, uint32_t data_size, void** dest) { ArrayData * r; if (hasZvalValues()) { assert(data_size == sizeof(void*)); int64_t k = 0; r = innerArr(this)->zAppend(*(RefData**)data, &k); if (dest) { *dest = (void*)(&r->nvGet(k)->m_data.pref); } } else { auto v = Variant(makeElementResource(data, data_size, dest)); r = innerArr(this)->append(*v.asTypedValue(), false); } reseatable(this, r); }
void ProxyArray::proxyAppend(void* data, uint32_t data_size, void** dest) { ArrayData * r; if (hasZvalValues()) { assert(data_size == sizeof(void*)); int64_t k = 0; r = m_ad->zAppend(*(RefData**)data, &k); if (dest) { *dest = (void*)(&m_ad->nvGet(k)->m_data.pref); } } else { ResourceData * elt = makeElementResource(data, data_size, dest); r = m_ad->append(elt, false); } reseatable(this, r); }