blob: 248e096d07b6d2b0abfe7ea719392e9dfb5525d1 [file] [log] [blame]
Dynamic Tools Team517193e2019-09-11 14:48:41 +00001//===-- bytemap.h -----------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef SCUDO_BYTEMAP_H_
10#define SCUDO_BYTEMAP_H_
11
12#include "atomic_helpers.h"
13#include "common.h"
14#include "mutex.h"
15
16namespace scudo {
17
18template <uptr Size> class FlatByteMap {
19public:
Kostya Kortchinsky4a435d22021-05-25 15:00:58 -070020 void init() { DCHECK(Size == 0 || Map[0] == 0); }
Dynamic Tools Team517193e2019-09-11 14:48:41 +000021
Kostya Kortchinsky4a435d22021-05-25 15:00:58 -070022 void unmapTestOnly() { memset(Map, 0, Size); }
Dynamic Tools Team517193e2019-09-11 14:48:41 +000023
24 void set(uptr Index, u8 Value) {
25 DCHECK_LT(Index, Size);
26 DCHECK_EQ(0U, Map[Index]);
27 Map[Index] = Value;
28 }
29 u8 operator[](uptr Index) {
30 DCHECK_LT(Index, Size);
31 return Map[Index];
32 }
33
Dynamic Tools Team83eaa512020-01-09 11:43:16 -080034 void disable() {}
35 void enable() {}
36
Dynamic Tools Team517193e2019-09-11 14:48:41 +000037private:
Kostya Kortchinsky4a435d22021-05-25 15:00:58 -070038 u8 Map[Size] = {};
Dynamic Tools Team517193e2019-09-11 14:48:41 +000039};
40
Dynamic Tools Team517193e2019-09-11 14:48:41 +000041} // namespace scudo
42
43#endif // SCUDO_BYTEMAP_H_