Exemplo n.º 1
0
bool SharedMap::IsVectorData(const ArrayData* ad) {
  auto a = asSharedMap(ad);
  const auto n = a->size();
  for (ssize_t i = 0; i < n; i++) {
    if (a->getIndex(i) != i) return false;
  }
  return true;
}
Exemplo n.º 2
0
void SharedMap::NvGetKey(const ArrayData* ad, TypedValue* out, ssize_t pos) {
  auto a = asSharedMap(ad);
  Variant k = a->m_arr->getKey(pos);
  TypedValue* tv = k.asTypedValue();
  // copy w/out clobbering out->_count.
  out->m_type = tv->m_type;
  out->m_data.num = tv->m_data.num;
  if (tv->m_type != KindOfInt64) out->m_data.pstr->incRefCount();
}
Exemplo n.º 3
0
HOT_FUNC
void SharedMap::Release(ArrayData* ad) {
  auto const smap = asSharedMap(ad);
  smap->~SharedMap();
  MM().smartFreeSize(smap, sizeof(SharedMap));
}
Exemplo n.º 4
0
SharedVariant* SharedMap::GetSharedVariant(const ArrayData* ad) {
  auto a = asSharedMap(ad);
  if (a->m_arr->shouldCache()) return nullptr;
  return a->m_arr;
}
Exemplo n.º 5
0
CVarRef SharedMap::GetValueRef(const ArrayData* ad, ssize_t pos) {
  return asSharedMap(ad)->getValueRef(pos);
}
Exemplo n.º 6
0
ssize_t SharedMap::IterRewind(const ArrayData* ad, ssize_t prev) {
  assert(prev >= 0 && prev < asSharedMap(ad)->m_size);
  ssize_t next = prev - 1;
  return next >= 0 ? next : invalid_index;
}
Exemplo n.º 7
0
ssize_t SharedMap::IterAdvance(const ArrayData* ad, ssize_t prev) {
  auto a = asSharedMap(ad);
  assert(prev >= 0 && prev < a->m_size);
  ssize_t next = prev + 1;
  return next < a->m_size ? next : invalid_index;
}
Exemplo n.º 8
0
ArrayData *SharedMap::Append(ArrayData* ad, CVarRef v, bool copy) {
  auto a = asSharedMap(ad);
  ArrayData *escalated = a->SharedMap::escalate();
  return releaseIfCopied(escalated, escalated->append(v, false));
}
Exemplo n.º 9
0
ssize_t SharedMap::IterBegin(const ArrayData* ad) {
  auto a = asSharedMap(ad);
  return a->m_size > 0 ? 0 : invalid_index;
}
Exemplo n.º 10
0
ArrayData* SharedMap::EscalateForSort(ArrayData* ad) {
  auto a = asSharedMap(ad);
  auto ret = a->m_arr->loadElems(*a);
  assert(!ret->isStatic());
  return ret;
}
Exemplo n.º 11
0
TypedValue* SharedMap::NvGetStr(const ArrayData* ad, const StringData* key) {
  auto a = asSharedMap(ad);
  auto index = a->getIndex(key);
  if (index == -1) return nullptr;
  return (TypedValue*)&a->getValueRef(index);
}
Exemplo n.º 12
0
TypedValue* SharedMap::NvGetInt(const ArrayData* ad, int64_t k) {
  auto a = asSharedMap(ad);
  auto index = a->getIndex(k);
  if (index == -1) return nullptr;
  return (TypedValue*)&a->getValueRef(index);
}
Exemplo n.º 13
0
ArrayData *SharedMap::Escalate(const ArrayData* ad) {
  auto smap = asSharedMap(ad);
  auto ret = smap->m_arr->loadElems(*smap);
  assert(!ret->isStatic());
  return ret;
}
Exemplo n.º 14
0
HOT_FUNC
void SharedMap::Release(ArrayData* ad) {
  asSharedMap(ad)->release();
}
Exemplo n.º 15
0
bool SharedMap::ExistsStr(const ArrayData* ad, const StringData* k) {
  auto a = asSharedMap(ad);
  return a->getIndex(k) != -1;
}
Exemplo n.º 16
0
ssize_t SharedMap::IterEnd(const ArrayData* ad) {
  auto a = asSharedMap(ad);
  auto n = a->m_size;
  return n > 0 ? ssize_t(n - 1) : invalid_index;
}
Exemplo n.º 17
0
bool SharedMap::ExistsInt(const ArrayData* ad, int64_t k) {
  return asSharedMap(ad)->getIndex(k) != -1;
}
Exemplo n.º 18
0
ArrayData*
SharedMap::SetStr(ArrayData* ad, StringData* k, CVarRef v, bool copy) {
  ArrayData *escalated = asSharedMap(ad)->SharedMap::escalate();
  return releaseIfCopied(escalated, escalated->set(k, v, false));
}