Beispiel #1
0
ArrayData *ZendArray::setRef(CStrRef k, CVarRef v, bool copy) {
  if (UNLIKELY(copy)) {
    ZendArray *a = copyImpl();
    a->updateRef(k.get(), v);
    return a;
  }
  updateRef(k.get(), v);
  return NULL;
}
ArrayData *VectorArray::setRef(CVarRef k, CVarRef v, bool copy) {
  Variant::TypedValueAccessor tva = k.getTypedAccessor();
  if (isIntKey(tva)) {
    return VectorArray::setRef(getIntKey(tva), v, copy);
  }
  ASSERT(k.isString());
  ZendArray *a = escalateToZendArray();
  a->updateRef(getStringKey(tva), v);
  return a;
}
Beispiel #3
0
ArrayData *ZendArray::setRef(CVarRef k, CVarRef v, bool copy) {
  TypedValueAccessor tva = k.getTypedAccessor();
  if (isIntKey(tva)) {
    if (UNLIKELY(copy)) {
      ZendArray *a = copyImpl();
      a->updateRef(getIntKey(tva), v);
      return a;
    }
    updateRef(getIntKey(tva), v);
    return NULL;
  } else {
    ASSERT(k.isString());
    StringData *sd = getStringKey(tva);
    if (UNLIKELY(copy)) {
      ZendArray *a = copyImpl();
      a->updateRef(sd, v);
      return a;
    }
    updateRef(sd, v);
    return NULL;
  }
}
Beispiel #4
0
ArrayData *VectorArray::setRef(int64 k, CVarRef v, bool copy) {
  if (UNLIKELY(copy)) {
    if (inRange(k, m_size) || k == m_size) {
      VectorArray *a = NEW(VectorArray)(this);
      a->VectorArray::setRef(k, v, false);
      return a;
    }
  } else {
    if (inRange(k, m_size)) {
      tvAsVariant(&m_elems[k]).assignRef(v);
      return nullptr;
    } else if (k == m_size) {
      checkSize();
      tvAsUninitializedVariant(&m_elems[k]).constructRefHelper(v);
      checkInsertIterator((ssize_t)k);
      m_size++;
      return nullptr;
    }
  }
  ZendArray *a = escalateToZendArray();
  a->updateRef(k, v);
  return a;
}
Beispiel #5
0
ArrayData *VectorArray::setRef(StringData* k, CVarRef v, bool copy) {
  ZendArray *a = escalateToZendArray();
  a->updateRef(k, v);
  return a;
}
ArrayData *VectorArray::setRef(CStrRef k, CVarRef v, bool copy) {
  ZendArray *a = escalateToZendArray();
  a->updateRef(k.get(), v);
  return a;
}