Commit 4242b192 authored by Frank Emrich's avatar Frank Emrich Committed by Commit Bot

[dict-proto] update comment describing layout of ordered hash tables

The comment at the beginning of ordered-hash-table.h desribing the
layout of ordered hash tables seems to have become outdated.

1. There was a "kPrefixSize + " missing in the description of the left
  bound of the first non-fixed-sized part in normal and obsoleted
  tables.

The following only affects obsoleted tables:

2. The bucket count doesn't reside at [kPrefixSize + 0], instead it is
  unchanged w.r.t normal tables, and resides at [kPrefixSize + 2]
3. The next newer table takes place of the element count, residing
  at  [kPrefixSize + 0]. This can be seen by NextTableIndex() being
  defined as NumberOfElementsIndex()
4. The number of removed holes is never written anywhere when
  obsoleting a table. Instead, the number of deleted elements count is
  used for this. This can be see by
  DCHECK_EQ(table->NumberOfDeletedElements(), removed_holes_index);
  in method Rehash
5. kClearedTableSentinel is written to the number of deleted element
  slot when clearing a table, as seen by
  table->SetNumberOfDeletedElements(kClearedTableSentinel);
  in method Clear

Bug: v8:7569, v8:11074
Change-Id: I0e6750fc57c90b6c09fc41f001cd555f7c455fd3
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2505763
Commit-Queue: Frank Emrich <emrich@google.com>
Reviewed-by: 's avatarIgor Sheludko <ishell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70918}
parent f4f7f618
......@@ -35,7 +35,7 @@ namespace internal {
// [kPrefixSize]: element count
// [kPrefixSize + 1]: deleted element count
// [kPrefixSize + 2]: bucket count
// [kPrefixSize + 3..(3 + NumberOfBuckets() - 1)]: "hash table",
// [kPrefixSize + 3..(kPrefixSize + 3 + NumberOfBuckets() - 1)]: "hash table",
// where each item is an offset into the
// data table (see below) where the first
// item in this bucket is stored.
......@@ -53,13 +53,15 @@ namespace internal {
//
// Memory layout for obsolete table:
// [0] : Prefix
// [kPrefixSize + 0]: bucket count
// [kPrefixSize + 1]: Next newer table
// [kPrefixSize + 2]: Number of removed holes or -1 when the table was
// cleared.
// [kPrefixSize + 3..(3 + NumberOfRemovedHoles() - 1)]: The indexes
// of the removed holes.
// [kPrefixSize + 3 + NumberOfRemovedHoles()..length]: Not used
// [kPrefixSize + 0]: Next newer table
// [kPrefixSize + 1]: deleted element count or kClearedTableSentinel if
// the table was cleared
// [kPrefixSize + 2]: bucket count
// [kPrefixSize + 3..(kPrefixSize + 3 + NumberOfDeletedElements() - 1)]:
// The indexes of the removed holes. This part is only
// usable for non-cleared tables, as clearing removes the
// deleted elements count.
// [kPrefixSize + 3 + NumberOfDeletedElements()..length]: Not used
template <class Derived, int entrysize>
class OrderedHashTable : public FixedArray {
public:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment