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 16 namespace scudo { 17 18 template <uptr Size> class FlatByteMap { 19 public: 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 37 private: 38 u8 Map[Size] = {}; 39 }; 40 41 } // namespace scudo 42 43 #endif // SCUDO_BYTEMAP_H_ 44