V8 Project
v8::internal::OrderedHashTable< Derived, Iterator, entrysize > Class Template Reference

#include <objects.h>

+ Inheritance diagram for v8::internal::OrderedHashTable< Derived, Iterator, entrysize >:
+ Collaboration diagram for v8::internal::OrderedHashTable< Derived, Iterator, entrysize >:

Public Member Functions

int FindEntry (Handle< Object > key, int hash)
 
int FindEntry (Handle< Object > key)
 
int NumberOfElements ()
 
int NumberOfDeletedElements ()
 
int UsedCapacity ()
 
int NumberOfBuckets ()
 
int AddEntry (int hash)
 
void RemoveEntry (int entry)
 
int EntryToIndex (int entry)
 
ObjectKeyAt (int entry)
 
bool IsObsolete ()
 
Derived * NextTable ()
 
int RemovedIndexAt (int index)
 
- Public Member Functions inherited from v8::internal::FixedArray
Objectget (int index)
 
void set (int index, Object *value)
 
bool is_the_hole (int index)
 
void set (int index, Smi *value)
 
void set (int index, Object *value, WriteBarrierMode mode)
 
void set_undefined (int index)
 
void set_null (int index)
 
void set_the_hole (int index)
 
Object ** GetFirstElementAddress ()
 
bool ContainsOnlySmisOrHoles ()
 
Object ** data_start ()
 
void FillWithHoles (int from, int to)
 
void Shrink (int length)
 
void CopyTo (int pos, FixedArray *dest, int dest_pos, int len)
 
Object ** RawFieldOfElementAt (int index)
 
void SwapPairs (FixedArray *numbers, int i, int j)
 
void SortPairs (FixedArray *numbers, uint32_t len)
 
- Public Member Functions inherited from v8::internal::FixedArrayBase
int length () const
 
void set_length (int value)
 
int synchronized_length () const
 
void synchronized_set_length (int value)
 
- Public Member Functions inherited from v8::internal::HeapObject
Mapmap () const
 
void set_map (Map *value)
 
void set_map_no_write_barrier (Map *value)
 
Mapsynchronized_map ()
 
MapWord synchronized_map_word () const
 
void synchronized_set_map (Map *value)
 
void synchronized_set_map_no_write_barrier (Map *value)
 
void synchronized_set_map_word (MapWord map_word)
 
MapWord map_word () const
 
void set_map_word (MapWord map_word)
 
HeapGetHeap () const
 
IsolateGetIsolate () const
 
Address address ()
 
void Iterate (ObjectVisitor *v)
 
void IterateBody (InstanceType type, int object_size, ObjectVisitor *v)
 
int Size ()
 
bool MayContainRawValues ()
 
int SizeFromMap (Map *map)
 
WriteBarrierMode GetWriteBarrierMode (const DisallowHeapAllocation &promise)
 
void HeapObjectShortPrint (OStream &os)
 
 STATIC_ASSERT (kMapOffset==Internals::kHeapObjectMapOffset)
 
- Public Member Functions inherited from v8::internal::Object
bool IsObject () const
 
 INLINE (bool IsFixedArrayBase() const)
 
 INLINE (bool IsExternal() const)
 
 INLINE (bool IsAccessorInfo() const)
 
 INLINE (bool IsStruct() const)
 
 INLINE (bool IsSpecObject()) const
 
 INLINE (bool IsSpecFunction()) const
 
 INLINE (bool IsTemplateInfo()) const
 
 INLINE (bool IsNameDictionary() const)
 
 INLINE (bool IsSeededNumberDictionary() const)
 
 INLINE (bool IsUnseededNumberDictionary() const)
 
 INLINE (bool IsOrderedHashSet() const)
 
 INLINE (bool IsOrderedHashMap() const)
 
bool IsCallable () const
 
 INLINE (bool IsUndefined() const)
 
 INLINE (bool IsNull() const)
 
 INLINE (bool IsTheHole() const)
 
 INLINE (bool IsException() const)
 
 INLINE (bool IsUninitialized() const)
 
 INLINE (bool IsTrue() const)
 
 INLINE (bool IsFalse() const)
 
 INLINE (bool IsArgumentsMarker() const)
 
 INLINE (bool IsFiller() const)
 
double Number ()
 
 INLINE (bool IsNaN() const)
 
 INLINE (bool IsMinusZero() const)
 
bool ToInt32 (int32_t *value)
 
bool ToUint32 (uint32_t *value)
 
Representation OptimalRepresentation ()
 
bool FitsRepresentation (Representation representation)
 
Handle< HeapTypeOptimalType (Isolate *isolate, Representation representation)
 
bool HasValidElements ()
 
bool HasSpecificClassOf (String *name)
 
bool BooleanValue ()
 
ObjectGetHash ()
 
bool SameValue (Object *other)
 
bool SameValueZero (Object *other)
 
bool ToArrayIndex (uint32_t *index)
 
bool IsStringObjectWithCharacterAt (uint32_t index)
 
void VerifyApiCallResultType ()
 
void ShortPrint (FILE *out=stdout)
 
void ShortPrint (StringStream *accumulator)
 

Static Public Member Functions

static Handle< Derived > Allocate (Isolate *isolate, int capacity, PretenureFlag pretenure=NOT_TENURED)
 
static Handle< Derived > EnsureGrowable (Handle< Derived > table)
 
static Handle< Derived > Shrink (Handle< Derived > table)
 
static Handle< Derived > Clear (Handle< Derived > table)
 
static Handle< Derived > Remove (Handle< Derived > table, Handle< Object > key, bool *was_present)
 
- Static Public Member Functions inherited from v8::internal::FixedArray
static Handle< Objectget (Handle< FixedArray > array, int index)
 
static Handle< FixedArrayCopySize (Handle< FixedArray > array, int new_length, PretenureFlag pretenure=NOT_TENURED)
 
static MUST_USE_RESULT MaybeHandle< FixedArrayAddKeysFromArrayLike (Handle< FixedArray > content, Handle< JSObject > array)
 
static MUST_USE_RESULT MaybeHandle< FixedArrayUnionOfKeys (Handle< FixedArray > first, Handle< FixedArray > second)
 
static int SizeFor (int length)
 
static int OffsetOfElementAt (int index)
 
- Static Public Member Functions inherited from v8::internal::HeapObject
static HeapObjectFromAddress (Address address)
 
static Object ** RawField (HeapObject *obj, int offset)
 
static void UpdateMapCodeCache (Handle< HeapObject > object, Handle< Name > name, Handle< Code > code)
 
- Static Public Member Functions inherited from v8::internal::Object
static Handle< ObjectNewStorageFor (Isolate *isolate, Handle< Object > object, Representation representation)
 
static Handle< ObjectWrapForRead (Isolate *isolate, Handle< Object > object, Representation representation)
 
static MaybeHandle< JSReceiverToObject (Isolate *isolate, Handle< Object > object)
 
static MaybeHandle< JSReceiverToObject (Isolate *isolate, Handle< Object > object, Handle< Context > context)
 
static MUST_USE_RESULT MaybeHandle< SmiToSmi (Isolate *isolate, Handle< Object > object)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetProperty (LookupIterator *it)
 
static MUST_USE_RESULT MaybeHandle< ObjectSetProperty (Handle< Object > object, Handle< Name > key, Handle< Object > value, StrictMode strict_mode, StoreFromKeyed store_mode=MAY_BE_STORE_FROM_KEYED)
 
static MUST_USE_RESULT MaybeHandle< ObjectSetProperty (LookupIterator *it, Handle< Object > value, StrictMode strict_mode, StoreFromKeyed store_mode, StorePropertyMode data_store_mode=NORMAL_PROPERTY)
 
static MUST_USE_RESULT MaybeHandle< ObjectWriteToReadOnlyProperty (LookupIterator *it, Handle< Object > value, StrictMode strict_mode)
 
static Handle< ObjectSetDataProperty (LookupIterator *it, Handle< Object > value)
 
static MUST_USE_RESULT MaybeHandle< ObjectAddDataProperty (LookupIterator *it, Handle< Object > value, PropertyAttributes attributes, StrictMode strict_mode, StoreFromKeyed store_mode)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetPropertyOrElement (Handle< Object > object, Handle< Name > key)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetProperty (Isolate *isolate, Handle< Object > object, const char *key)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetProperty (Handle< Object > object, Handle< Name > key)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetPropertyWithAccessor (Handle< Object > receiver, Handle< Name > name, Handle< JSObject > holder, Handle< Object > structure)
 
static MUST_USE_RESULT MaybeHandle< ObjectSetPropertyWithAccessor (Handle< Object > receiver, Handle< Name > name, Handle< Object > value, Handle< JSObject > holder, Handle< Object > structure, StrictMode strict_mode)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetPropertyWithDefinedGetter (Handle< Object > receiver, Handle< JSReceiver > getter)
 
static MUST_USE_RESULT MaybeHandle< ObjectSetPropertyWithDefinedSetter (Handle< Object > receiver, Handle< JSReceiver > setter, Handle< Object > value)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetElement (Isolate *isolate, Handle< Object > object, uint32_t index)
 
static MUST_USE_RESULT MaybeHandle< ObjectGetElementWithReceiver (Isolate *isolate, Handle< Object > object, Handle< Object > receiver, uint32_t index)
 
static Handle< SmiGetOrCreateHash (Isolate *isolate, Handle< Object > object)
 

Static Public Attributes

static const int kNotFound = -1
 
static const int kMinCapacity = 4
 
- Static Public Attributes inherited from v8::internal::FixedArray
static const int kMaxSize = 128 * MB * kPointerSize
 
static const int kMaxLength = (kMaxSize - kHeaderSize) / kPointerSize
 
- Static Public Attributes inherited from v8::internal::FixedArrayBase
static const int kLengthOffset = HeapObject::kHeaderSize
 
static const int kHeaderSize = kLengthOffset + kPointerSize
 
- Static Public Attributes inherited from v8::internal::HeapObject
static const int kMapOffset = Object::kHeaderSize
 
static const int kHeaderSize = kMapOffset + kPointerSize
 
- Static Public Attributes inherited from v8::internal::Object
static const int kHeaderSize = 0
 

Private Member Functions

void SetNumberOfBuckets (int num)
 
void SetNumberOfElements (int num)
 
void SetNumberOfDeletedElements (int num)
 
int Capacity ()
 
int ChainAt (int entry)
 
int HashToBucket (int hash)
 
int HashToEntry (int hash)
 
void SetNextTable (Derived *next_table)
 
void SetRemovedIndexAt (int index, int removed_index)
 

Static Private Member Functions

static Handle< Derived > Rehash (Handle< Derived > table, int new_capacity)
 

Static Private Attributes

static const int kNumberOfBucketsIndex = 0
 
static const int kNumberOfElementsIndex = kNumberOfBucketsIndex + 1
 
static const int kNumberOfDeletedElementsIndex = kNumberOfElementsIndex + 1
 
static const int kHashTableStartIndex = kNumberOfDeletedElementsIndex + 1
 
static const int kNextTableIndex = kNumberOfElementsIndex
 
static const int kRemovedHolesIndex = kHashTableStartIndex
 
static const int kEntrySize = entrysize + 1
 
static const int kChainOffset = entrysize
 
static const int kLoadFactor = 2
 
static const int kMaxCapacity
 

Additional Inherited Members

- Public Types inherited from v8::internal::Object
enum  StoreFromKeyed { MAY_BE_STORE_FROM_KEYED , CERTAINLY_NOT_STORE_FROM_KEYED }
 
enum  StorePropertyMode { NORMAL_PROPERTY , SUPER_PROPERTY }
 
- Protected Member Functions inherited from v8::internal::HeapObject
void IteratePointers (ObjectVisitor *v, int start, int end)
 
void IteratePointer (ObjectVisitor *v, int offset)
 
void IterateNextCodeLink (ObjectVisitor *v, int offset)
 
- Static Protected Member Functions inherited from v8::internal::FixedArray
static void NoWriteBarrierSet (FixedArray *array, int index, Object *value)
 
static void NoIncrementalWriteBarrierSet (FixedArray *array, int index, Object *value)
 

Detailed Description

template<class Derived, class Iterator, int entrysize>
class v8::internal::OrderedHashTable< Derived, Iterator, entrysize >

Definition at line 3834 of file objects.h.

Member Function Documentation

◆ AddEntry()

template<class Derived , class Iterator , int entrysize>
template int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::AddEntry ( int  hash)

Definition at line 15571 of file objects.cc.

15571  {
15572  DCHECK(!IsObsolete());
15573 
15574  int entry = UsedCapacity();
15575  int bucket = HashToBucket(hash);
15576  int index = EntryToIndex(entry);
15577  Object* chain_entry = get(kHashTableStartIndex + bucket);
15578  set(kHashTableStartIndex + bucket, Smi::FromInt(entry));
15579  set(index + kChainOffset, chain_entry);
15581  return index;
15582 }
Object * get(int index)
Definition: objects-inl.h:2165
void set(int index, Object *value)
Definition: objects-inl.h:2190
static const int kHashTableStartIndex
Definition: objects.h:3954
static const int kChainOffset
Definition: objects.h:3960
int EntryToIndex(int entry)
Definition: objects.h:3887
void SetNumberOfElements(int num)
Definition: objects.h:3917
static Smi * FromInt(int value)
Definition: objects-inl.h:1321
#define DCHECK(condition)
Definition: logging.h:205
kSerializedDataOffset Object
Definition: objects-inl.h:5322

References DCHECK, v8::internal::Smi::FromInt(), v8::internal::FixedArray::get(), and v8::internal::FixedArray::set().

+ Here is the call graph for this function:

◆ Allocate()

template<class Derived , class Iterator , int entrysize>
template Handle< OrderedHashMap > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Allocate ( Isolate isolate,
int  capacity,
PretenureFlag  pretenure = NOT_TENURED 
)
static

Definition at line 15412 of file objects.cc.

15413  {
15414  // Capacity must be a power of two, since we depend on being able
15415  // to divide and multiple by 2 (kLoadFactor) to derive capacity
15416  // from number of buckets. If we decide to change kLoadFactor
15417  // to something other than 2, capacity should be stored as another
15418  // field of this object.
15419  capacity = base::bits::RoundUpToPowerOfTwo32(Max(kMinCapacity, capacity));
15420  if (capacity > kMaxCapacity) {
15421  v8::internal::Heap::FatalProcessOutOfMemory("invalid table size", true);
15422  }
15423  int num_buckets = capacity / kLoadFactor;
15424  Handle<FixedArray> backing_store = isolate->factory()->NewFixedArray(
15425  kHashTableStartIndex + num_buckets + (capacity * kEntrySize), pretenure);
15426  backing_store->set_map_no_write_barrier(
15427  isolate->heap()->ordered_hash_table_map());
15428  Handle<Derived> table = Handle<Derived>::cast(backing_store);
15429  for (int i = 0; i < num_buckets; ++i) {
15430  table->set(kHashTableStartIndex + i, Smi::FromInt(kNotFound));
15431  }
15432  table->SetNumberOfBuckets(num_buckets);
15433  table->SetNumberOfElements(0);
15434  table->SetNumberOfDeletedElements(0);
15435  return table;
15436 }
static Handle< T > cast(Handle< S > that)
Definition: handles.h:116
static void FatalProcessOutOfMemory(const char *location, bool take_snapshot=false)
Definition: heap.cc:5376
static const int kNotFound
Definition: objects.h:3907
static const int kLoadFactor
Definition: objects.h:3962
static const int kMaxCapacity
Definition: objects.h:3963
static const int kMinCapacity
Definition: objects.h:3908
static const int kEntrySize
Definition: objects.h:3959
uint32_t RoundUpToPowerOfTwo32(uint32_t value)
Definition: bits.cc:12
static LifetimePosition Max(LifetimePosition a, LifetimePosition b)

References v8::internal::Handle< T >::cast(), v8::internal::Isolate::factory(), v8::internal::Heap::FatalProcessOutOfMemory(), v8::internal::Smi::FromInt(), v8::internal::Isolate::heap(), v8::internal::Max(), and v8::base::bits::RoundUpToPowerOfTwo32().

+ Here is the call graph for this function:

◆ Capacity()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Capacity ( )
inlineprivate

Definition at line 3925 of file objects.h.

3925  {
3926  return NumberOfBuckets() * kLoadFactor;
3927  }

◆ ChainAt()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::ChainAt ( int  entry)
inlineprivate

Definition at line 3930 of file objects.h.

3930  {
3931  return Smi::cast(get(EntryToIndex(entry) + kChainOffset))->value();
3932  }

◆ Clear()

template<class Derived , class Iterator , int entrysize>
template Handle< OrderedHashMap > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Clear ( Handle< Derived >  table)
static

Definition at line 15468 of file objects.cc.

15469  {
15470  DCHECK(!table->IsObsolete());
15471 
15472  Handle<Derived> new_table =
15473  Allocate(table->GetIsolate(),
15474  kMinCapacity,
15475  table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
15476 
15477  table->SetNextTable(*new_table);
15478  table->SetNumberOfDeletedElements(-1);
15479 
15480  return new_table;
15481 }
static Handle< Derived > Allocate(Isolate *isolate, int capacity, PretenureFlag pretenure=NOT_TENURED)
Definition: objects.cc:15412

References DCHECK, v8::internal::NOT_TENURED, and v8::internal::TENURED.

◆ EnsureGrowable()

template<class Derived , class Iterator , int entrysize>
template Handle< OrderedHashMap > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::EnsureGrowable ( Handle< Derived >  table)
static

Definition at line 15440 of file objects.cc.

15441  {
15442  DCHECK(!table->IsObsolete());
15443 
15444  int nof = table->NumberOfElements();
15445  int nod = table->NumberOfDeletedElements();
15446  int capacity = table->Capacity();
15447  if ((nof + nod) < capacity) return table;
15448  // Don't need to grow if we can simply clear out deleted entries instead.
15449  // Note that we can't compact in place, though, so we always allocate
15450  // a new table.
15451  return Rehash(table, (nod < (capacity >> 1)) ? capacity << 1 : capacity);
15452 }
static Handle< Derived > Rehash(Handle< Derived > table, int new_capacity)
Definition: objects.cc:15499

References DCHECK.

◆ EntryToIndex()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::EntryToIndex ( int  entry)
inline

Definition at line 3887 of file objects.h.

3887  {
3888  return kHashTableStartIndex + NumberOfBuckets() + (entry * kEntrySize);
3889  }

◆ FindEntry() [1/2]

template<class Derived , class Iterator , int entrysize>
template int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::FindEntry ( Handle< Object key)

Definition at line 15561 of file objects.cc.

15562  {
15563  DisallowHeapAllocation no_gc;
15564  Object* hash = key->GetHash();
15565  if (!hash->IsSmi()) return kNotFound;
15566  return FindEntry(key, Smi::cast(hash)->value());
15567 }
int FindEntry(Handle< Object > key, int hash)
Definition: objects.cc:15544
PerThreadAssertScopeDebugOnly< HEAP_ALLOCATION_ASSERT, false > DisallowHeapAllocation
Definition: assert-scope.h:110

◆ FindEntry() [2/2]

template<class Derived , class Iterator , int entrysize>
template int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::FindEntry ( Handle< Object key,
int  hash 
)

Definition at line 15544 of file objects.cc.

15545  {
15546  DCHECK(!IsObsolete());
15547 
15548  DisallowHeapAllocation no_gc;
15549  DCHECK(!key->IsTheHole());
15550  for (int entry = HashToEntry(hash); entry != kNotFound;
15551  entry = ChainAt(entry)) {
15552  Object* candidate = KeyAt(entry);
15553  if (candidate->SameValueZero(*key))
15554  return entry;
15555  }
15556  return kNotFound;
15557 }
Object * KeyAt(int entry)
Definition: objects.h:3891

References DCHECK, and v8::internal::Object::SameValueZero().

+ Here is the call graph for this function:

◆ HashToBucket()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::HashToBucket ( int  hash)
inlineprivate

Definition at line 3934 of file objects.h.

3934  {
3935  return hash & (NumberOfBuckets() - 1);
3936  }

◆ HashToEntry()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::HashToEntry ( int  hash)
inlineprivate

Definition at line 3938 of file objects.h.

3938  {
3939  int bucket = HashToBucket(hash);
3940  return Smi::cast(get(kHashTableStartIndex + bucket))->value();
3941  }

◆ IsObsolete()

template<class Derived , class Iterator , int entrysize>
bool v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::IsObsolete ( )
inline

Definition at line 3893 of file objects.h.

3893  {
3894  return !get(kNextTableIndex)->IsSmi();
3895  }
static const int kNextTableIndex
Definition: objects.h:3956

◆ KeyAt()

template<class Derived , class Iterator , int entrysize>
Object* v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::KeyAt ( int  entry)
inline

Definition at line 3891 of file objects.h.

3891 { return get(EntryToIndex(entry)); }

◆ NextTable()

template<class Derived , class Iterator , int entrysize>
Derived* v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::NextTable ( )
inline

Definition at line 3898 of file objects.h.

3898  {
3899  return Derived::cast(get(kNextTableIndex));
3900  }

◆ NumberOfBuckets()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::NumberOfBuckets ( )
inline

Definition at line 3873 of file objects.h.

3873  {
3874  return Smi::cast(get(kNumberOfBucketsIndex))->value();
3875  }
static const int kNumberOfBucketsIndex
Definition: objects.h:3951

◆ NumberOfDeletedElements()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::NumberOfDeletedElements ( )
inline

Definition at line 3867 of file objects.h.

3867  {
3868  return Smi::cast(get(kNumberOfDeletedElementsIndex))->value();
3869  }
static const int kNumberOfDeletedElementsIndex
Definition: objects.h:3953

◆ NumberOfElements()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::NumberOfElements ( )
inline

Definition at line 3863 of file objects.h.

3863  {
3864  return Smi::cast(get(kNumberOfElementsIndex))->value();
3865  }
static const int kNumberOfElementsIndex
Definition: objects.h:3952

◆ Rehash()

template<class Derived , class Iterator , int entrysize>
Handle< Derived > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Rehash ( Handle< Derived >  table,
int  new_capacity 
)
staticprivate

Definition at line 15499 of file objects.cc.

15500  {
15501  DCHECK(!table->IsObsolete());
15502 
15503  Handle<Derived> new_table =
15504  Allocate(table->GetIsolate(),
15505  new_capacity,
15506  table->GetHeap()->InNewSpace(*table) ? NOT_TENURED : TENURED);
15507  int nof = table->NumberOfElements();
15508  int nod = table->NumberOfDeletedElements();
15509  int new_buckets = new_table->NumberOfBuckets();
15510  int new_entry = 0;
15511  int removed_holes_index = 0;
15512 
15513  for (int old_entry = 0; old_entry < (nof + nod); ++old_entry) {
15514  Object* key = table->KeyAt(old_entry);
15515  if (key->IsTheHole()) {
15516  table->SetRemovedIndexAt(removed_holes_index++, old_entry);
15517  continue;
15518  }
15519 
15520  Object* hash = key->GetHash();
15521  int bucket = Smi::cast(hash)->value() & (new_buckets - 1);
15522  Object* chain_entry = new_table->get(kHashTableStartIndex + bucket);
15523  new_table->set(kHashTableStartIndex + bucket, Smi::FromInt(new_entry));
15524  int new_index = new_table->EntryToIndex(new_entry);
15525  int old_index = table->EntryToIndex(old_entry);
15526  for (int i = 0; i < entrysize; ++i) {
15527  Object* value = table->get(old_index + i);
15528  new_table->set(new_index + i, value);
15529  }
15530  new_table->set(new_index + kChainOffset, chain_entry);
15531  ++new_entry;
15532  }
15533 
15534  DCHECK_EQ(nod, removed_holes_index);
15535 
15536  new_table->SetNumberOfElements(nof);
15537  table->SetNextTable(*new_table);
15538 
15539  return new_table;
15540 }
#define DCHECK_EQ(v1, v2)
Definition: logging.h:206

References DCHECK, DCHECK_EQ, v8::internal::Smi::FromInt(), v8::internal::Object::GetHash(), v8::internal::NOT_TENURED, and v8::internal::TENURED.

+ Here is the call graph for this function:

◆ Remove()

template<class Derived , class Iterator , int entrysize>
template Handle< OrderedHashMap > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Remove ( Handle< Derived >  table,
Handle< Object key,
bool was_present 
)
static

Definition at line 15485 of file objects.cc.

15486  {
15487  int entry = table->FindEntry(key);
15488  if (entry == kNotFound) {
15489  *was_present = false;
15490  return table;
15491  }
15492  *was_present = true;
15493  table->RemoveEntry(entry);
15494  return Shrink(table);
15495 }
static Handle< Derived > Shrink(Handle< Derived > table)
Definition: objects.cc:15456

References v8::internal::FixedArray::Shrink().

+ Here is the call graph for this function:

◆ RemovedIndexAt()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::RemovedIndexAt ( int  index)
inline

Definition at line 3903 of file objects.h.

3903  {
3904  return Smi::cast(get(kRemovedHolesIndex + index))->value();
3905  }
static const int kRemovedHolesIndex
Definition: objects.h:3957

◆ RemoveEntry()

template<class Derived , class Iterator , int entrysize>
template void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::RemoveEntry ( int  entry)

Definition at line 15586 of file objects.cc.

15586  {
15587  DCHECK(!IsObsolete());
15588 
15589  int index = EntryToIndex(entry);
15590  for (int i = 0; i < entrysize; ++i) {
15591  set_the_hole(index + i);
15592  }
15595 }
void set_the_hole(int index)
Definition: objects-inl.h:2723
void SetNumberOfDeletedElements(int num)
Definition: objects.h:3921

References DCHECK, and v8::internal::FixedArray::set_the_hole().

+ Here is the call graph for this function:

◆ SetNextTable()

template<class Derived , class Iterator , int entrysize>
void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::SetNextTable ( Derived *  next_table)
inlineprivate

Definition at line 3943 of file objects.h.

3943  {
3944  set(kNextTableIndex, next_table);
3945  }

◆ SetNumberOfBuckets()

template<class Derived , class Iterator , int entrysize>
void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::SetNumberOfBuckets ( int  num)
inlineprivate

Definition at line 3913 of file objects.h.

3913  {
3915  }

References v8::internal::Smi::FromInt().

+ Here is the call graph for this function:

◆ SetNumberOfDeletedElements()

template<class Derived , class Iterator , int entrysize>
void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::SetNumberOfDeletedElements ( int  num)
inlineprivate

Definition at line 3921 of file objects.h.

3921  {
3923  }

References v8::internal::Smi::FromInt().

+ Here is the call graph for this function:

◆ SetNumberOfElements()

template<class Derived , class Iterator , int entrysize>
void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::SetNumberOfElements ( int  num)
inlineprivate

Definition at line 3917 of file objects.h.

3917  {
3919  }

References v8::internal::Smi::FromInt().

+ Here is the call graph for this function:

◆ SetRemovedIndexAt()

template<class Derived , class Iterator , int entrysize>
void v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::SetRemovedIndexAt ( int  index,
int  removed_index 
)
inlineprivate

Definition at line 3947 of file objects.h.

3947  {
3948  return set(kRemovedHolesIndex + index, Smi::FromInt(removed_index));
3949  }

References v8::internal::Smi::FromInt().

+ Here is the call graph for this function:

◆ Shrink()

template<class Derived , class Iterator , int entrysize>
template Handle< OrderedHashMap > v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::Shrink ( Handle< Derived >  table)
static

Definition at line 15456 of file objects.cc.

15457  {
15458  DCHECK(!table->IsObsolete());
15459 
15460  int nof = table->NumberOfElements();
15461  int capacity = table->Capacity();
15462  if (nof >= (capacity >> 2)) return table;
15463  return Rehash(table, capacity / 2);
15464 }

References DCHECK.

◆ UsedCapacity()

template<class Derived , class Iterator , int entrysize>
int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::UsedCapacity ( )
inline

Definition at line 3871 of file objects.h.

3871 { return NumberOfElements() + NumberOfDeletedElements(); }

Member Data Documentation

◆ kChainOffset

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kChainOffset = entrysize
staticprivate

Definition at line 3960 of file objects.h.

◆ kEntrySize

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kEntrySize = entrysize + 1
staticprivate

Definition at line 3959 of file objects.h.

◆ kHashTableStartIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kHashTableStartIndex = kNumberOfDeletedElementsIndex + 1
staticprivate

Definition at line 3954 of file objects.h.

◆ kLoadFactor

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kLoadFactor = 2
staticprivate

Definition at line 3962 of file objects.h.

◆ kMaxCapacity

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kMaxCapacity
staticprivate
Initial value:

Definition at line 3963 of file objects.h.

◆ kMinCapacity

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kMinCapacity = 4
static

Definition at line 3908 of file objects.h.

◆ kNextTableIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kNextTableIndex = kNumberOfElementsIndex
staticprivate

Definition at line 3956 of file objects.h.

◆ kNotFound

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kNotFound = -1
static

Definition at line 3907 of file objects.h.

◆ kNumberOfBucketsIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kNumberOfBucketsIndex = 0
staticprivate

Definition at line 3951 of file objects.h.

◆ kNumberOfDeletedElementsIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kNumberOfDeletedElementsIndex = kNumberOfElementsIndex + 1
staticprivate

Definition at line 3953 of file objects.h.

◆ kNumberOfElementsIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kNumberOfElementsIndex = kNumberOfBucketsIndex + 1
staticprivate

Definition at line 3952 of file objects.h.

◆ kRemovedHolesIndex

template<class Derived , class Iterator , int entrysize>
const int v8::internal::OrderedHashTable< Derived, Iterator, entrysize >::kRemovedHolesIndex = kHashTableStartIndex
staticprivate

Definition at line 3957 of file objects.h.


The documentation for this class was generated from the following files: