blob: 248e096d07b6d2b0abfe7ea719392e9dfb5525d1 [file] [log] [blame]
Kostya Kortchinsky7421f7b2019-03-05 17:36:111//===-- 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 Kortchinskya45877e2021-05-25 22:00:5820 void init() { DCHECK(Size == 0 || Map[0] == 0); }
Kostya Kortchinsky7421f7b2019-03-05 17:36:1121
Kostya Kortchinskya45877e2021-05-25 22:00:5822 void unmapTestOnly() { memset(Map, 0, Size); }
Kostya Kortchinsky624a24e2019-06-11 19:50:1223
Kostya Kortchinsky7421f7b2019-03-05 17:36:1124 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
Kostya Kortchinsky9ef6faf2020-01-09 19:43:1634 void disable() {}
35 void enable() {}
36
Kostya Kortchinsky7421f7b2019-03-05 17:36:1137private:
Kostya Kortchinskya45877e2021-05-25 22:00:5838 u8 Map[Size] = {};
Kostya Kortchinsky7421f7b2019-03-05 17:36:1139};
40
Kostya Kortchinsky7421f7b2019-03-05 17:36:1141} // namespace scudo
42
43#endif // SCUDO_BYTEMAP_H_