//===-- sanitizer_flat_map.h ------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Part of the Sanitizer Allocator. // //===----------------------------------------------------------------------===// #ifndef SANITIZER_FLAT_MAP_H #define SANITIZER_FLAT_MAP_H #include "sanitizer_atomic.h" #include "sanitizer_common.h" #include "sanitizer_internal_defs.h" #include "sanitizer_local_address_space_view.h" #include "sanitizer_mutex.h" namespace __sanitizer { // Maps integers in rage [0, kSize) to values. template <typename T, u64 kSize, typename AddressSpaceViewTy = LocalAddressSpaceView> class FlatMap { … }; // TwoLevelMap maps integers in range [0, kSize1*kSize2) to values. // It is implemented as a two-dimensional array: array of kSize1 pointers // to kSize2-byte arrays. The secondary arrays are mmaped on demand. // Each value is initially zero and can be set to something else only once. // Setting and getting values from multiple threads is safe w/o extra locking. template <typename T, u64 kSize1, u64 kSize2, typename AddressSpaceViewTy = LocalAddressSpaceView> class TwoLevelMap { … }; FlatByteMap; TwoLevelByteMap; } // namespace __sanitizer #endif