void * ProxyArray::proxyGet(MArrayIter & pos) const { if (!pos.prepare()) { return nullptr; } Variant & v = pos.val(); return elementToData(&v); }
void* ProxyArray::proxyGet(const Variant & k) const { if (!innerArr(this)->exists(k)) { return nullptr; } auto r = innerArr(this)->lval(k, false); reseatable(this, r.array); return elementToData(r.val); }
void * ProxyArray::proxyGet(const Variant & k) const { Variant * v = nullptr; if (!innerArr(this)->exists(k)) { return nullptr; } reseatable(this, innerArr(this)->lval(k, v, false)); return elementToData(v); }
void* ProxyArray::proxyGet(StringData * str) const { // elementToData() may need to modify the value. The zend_hash_find() // interface itself is theoretically non-const and callers may write directly // to the value. So lval() is appropriate here, to force escalation of // APCLocalArray to MixedArray. if (!innerArr(this)->exists(str)) { return nullptr; } auto r = innerArr(this)->lval(str, false); reseatable(this, r.array); return elementToData(r.val); }
void * ProxyArray::proxyGetValueRef(ssize_t pos) const { auto& val = m_ad->getValueRef(pos); // FIXME: we shouldn't be modifying this TypedValue return elementToData(const_cast<HPHP::TypedValue*>(val.asTypedValue())); }
void * ProxyArray::proxyGet(int64_t k) const { // FIXME: const_cast is a bug, may destroy shared data return elementToData(const_cast<TypedValue*>(m_ad->nvGet(k))); }