75 template <
typename IsolateT,
template <
typename>
typename HandleType>
76 requires(std::is_convertible_v<HandleType<SwissNameDictionary>,
78 inline static HandleType<SwissNameDictionary> Add(
79 IsolateT* isolate, HandleType<SwissNameDictionary> table,
83 template <
template <
typename>
typename HandleType>
84 requires(std::is_convertible_v<HandleType<SwissNameDictionary>,
86 static HandleType<SwissNameDictionary> Shrink(
87 Isolate* isolate, HandleType<SwissNameDictionary> table);
89 template <
template <
typename>
typename HandleType>
90 requires(std::is_convertible_v<HandleType<SwissNameDictionary>,
92 static HandleType<SwissNameDictionary> DeleteEntry(
93 Isolate* isolate, HandleType<SwissNameDictionary> table,
96 template <
typename IsolateT>
104 template <
typename IsolateT>
115 inline std::optional<Tagged<Object>> TryValueAt(
InternalIndex entry);
121 inline int NumberOfElements();
122 inline int NumberOfDeletedElements();
124 inline int Capacity();
125 inline int UsedCapacity();
127 int NumberOfEnumerableProperties();
142 template <
typename IsolateT>
146 template <
typename IsolateT,
template <
typename>
typename HandleType>
147 requires(std::is_convertible_v<HandleType<SwissNameDictionary>,
149 static HandleType<SwissNameDictionary> Rehash(
150 IsolateT* isolate, HandleType<SwissNameDictionary> table,
152 template <
typename IsolateT>
153 void Rehash(IsolateT* isolate);
155 inline void SetHash(
int hash);
199 inline int EntryForEnumerationIndex(
int enumeration_index);
201 inline static constexpr bool IsValidCapacity(
int capacity);
202 inline static int CapacityFor(
int at_least_space_for);
205 inline static constexpr int MaxUsableCapacity(
int capacity);
208 inline static constexpr int MaxCapacity();
211 inline static constexpr int SizeFor(
int capacity);
213 inline static constexpr int MetaTableSizePerEntryFor(
int capacity);
214 inline static constexpr int MetaTableSizeFor(
int capacity);
216 inline static constexpr int DataTableSize(
int capacity);
217 inline static constexpr int CtrlTableSize(
int capacity);
220 static constexpr bool kIsOrderedDictionaryType =
true;
224 static constexpr int kNotFoundSentinel = -1;
226 static const int kGroupWidth = Group::kWidth;
227 static const bool kUseSIMD = kGroupWidth == 16;
237 static constexpr int kDataTableEntryCount = 2;
238 static constexpr int kDataTableKeyEntryIndex = 0;
239 static constexpr int kDataTableValueEntryIndex = kDataTableKeyEntryIndex + 1;
247 static constexpr int kMetaTableElementCountFieldIndex = 0;
248 static constexpr int kMetaTableDeletedElementCountFieldIndex = 1;
251 static constexpr int kMetaTableEnumerationDataStartIndex = 2;
255 static constexpr int kMax1ByteMetaTableCapacity = (1 << 8);
258 static constexpr int kMax2ByteMetaTableCapacity = (1 << 16);
265 inline static constexpr Offset PrefixOffset();
266 inline static constexpr Offset CapacityOffset();
267 inline static constexpr Offset MetaTablePointerOffset();
268 inline static constexpr Offset DataTableStartOffset();
269 inline static constexpr Offset DataTableEndOffset(
int capacity);
270 inline static constexpr Offset CtrlTableStartOffset(
int capacity);
271 inline static constexpr Offset PropertyDetailsTableStartOffset(
int capacity);
274 void SwissNameDictionaryVerify(
Isolate* isolate,
bool slow_checks);
284 template <typename IsolateT, template <typename> typename HandleType>
292 inline uint8_t* PropertyDetailsTable();
295 inline
void ClearDataTableEntry(
Isolate* isolate,
int entry);
299 inline
void ValueAtPut(
int entry,
Tagged<
Object> value);
307 inline
int FindFirstEmpty(uint32_t hash);
318 inline
ctrl_t* CtrlTable();
320 inline static
bool IsEmpty(
ctrl_t c);
321 inline static
bool IsFull(
ctrl_t c);
322 inline static
bool IsDeleted(
ctrl_t c);
323 inline static
bool IsEmptyOrDeleted(
ctrl_t c);
327 inline
void SetCtrl(
int entry,
ctrl_t h);
328 inline
ctrl_t GetCtrl(
int entry);
330 inline
Tagged<
Object> LoadFromDataTable(
int entry,
int data_offset);
333 inline
void StoreToDataTable(
int entry,
int data_offset,
Tagged<
Object> data);
334 inline
void StoreToDataTableNoBarrier(
int entry,
int data_offset,
337 inline
void SetCapacity(
int capacity);
338 inline
void SetNumberOfElements(
int elements);
339 inline
void SetNumberOfDeletedElements(
int deleted_elements);
341 static inline swiss_table::ProbeSequence<
Group::kWidth> probe(uint32_t hash,
346 inline
void SetEntryForEnumerationIndex(
int enumeration_index,
int entry);
349 inline
void SetMetaTableField(
int field_index,
int value);
350 inline
int GetMetaTableField(
int field_index);
352 template <typename T>
354 int field_index,
int value);
355 template <typename T>