//===----------------------- InitMap.cpp ------------------------*- 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 // //===----------------------------------------------------------------------===// #include "InitMap.h" using namespace clang; using namespace clang::interp; InitMap::InitMap(unsigned N) : UninitFields(N), Data(std::make_unique(numFields(N))) {} bool InitMap::initializeElement(unsigned I) { unsigned Bucket = I / PER_FIELD; T Mask = T(1) << (I % PER_FIELD); if (!(data()[Bucket] & Mask)) { data()[Bucket] |= Mask; UninitFields -= 1; } return UninitFields == 0; } bool InitMap::isElementInitialized(unsigned I) const { if (UninitFields == 0) return true; unsigned Bucket = I / PER_FIELD; return data()[Bucket] & (T(1) << (I % PER_FIELD)); }