Example #1
0
void * ProxyArray::proxyGet(MArrayIter & pos) const {
  if (!pos.prepare()) {
    return nullptr;
  }
  Variant & v = pos.val();
  return elementToData(&v);
}
Example #2
0
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);
}
Example #3
0
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);
}
Example #4
0
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);
}
Example #5
0
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()));
}
Example #6
0
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)));
}