// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_HEAP_CODE_OBJECT_REGISTRY_H_
#define V8_HEAP_CODE_OBJECT_REGISTRY_H_

#include <set>
#include <vector>

#include "src/base/macros.h"
#include "src/common/globals.h"

namespace v8 {
namespace internal {

// The CodeObjectRegistry holds all start addresses of code objects of a given
// MemoryChunk. Each MemoryChunk owns a separate CodeObjectRegistry. The
// CodeObjectRegistry allows fast lookup from an inner pointer of a code object
// to the actual code object.
class V8_EXPORT_PRIVATE CodeObjectRegistry {
 public:
  void RegisterNewlyAllocatedCodeObject(Address code);
  void RegisterAlreadyExistingCodeObject(Address code);
  void Clear();
  void Finalize();
  bool Contains(Address code) const;
  Address GetCodeObjectStartFromInnerAddress(Address address) const;

 private:
  // A vector of addresses, which may be sorted. This is set to 'mutable' so
  // that it can be lazily sorted during GetCodeObjectStartFromInnerAddress.
  mutable std::vector<Address> code_object_registry_;
  mutable bool is_sorted_ = true;
};

}  // namespace internal
}  // namespace v8

#endif  // V8_HEAP_CODE_OBJECT_REGISTRY_H_
