コード例 #1
0
ファイル: proxy-array.cpp プロジェクト: BwRy/hhvm
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();
  }
}
コード例 #2
0
ファイル: proxy-array.cpp プロジェクト: MatmaRex/hhvm
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);
}
コード例 #3
0
ファイル: proxy-array.cpp プロジェクト: BwRy/hhvm
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);
}