1//===-- 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:
20 void init() { DCHECK(Size == 0 || Map[0] == 0); }
21
22 void unmapTestOnly() { memset(Map, 0, Size); }
23
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
34 void disable() {}
35 void enable() {}
36
37private:
38 u8 Map[Size] = {};
39};
40
41} // namespace scudo
42
43#endif // SCUDO_BYTEMAP_H_
44