1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
//===--- FileVisibilityChecker.h --------------------------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2018 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
#ifndef INDEXSTOREDB_LIB_INDEX_FILEVISIBILITYCHECKER_H
#define INDEXSTOREDB_LIB_INDEX_FILEVISIBILITYCHECKER_H
#include "IndexStoreDB/Database/IDCode.h"
#include "IndexStoreDB/Support/LLVM.h"
#include "llvm/Support/Mutex.h"
#include <unordered_map>
#include <unordered_set>
namespace IndexStoreDB {
class CanonicalPathCache;
namespace db {
class IDCode;
class ReadTransaction;
class Database;
typedef std::shared_ptr<Database> DatabaseRef;
struct UnitInfo;
}
namespace index {
class FileVisibilityChecker {
db::DatabaseRef DBase;
std::shared_ptr<CanonicalPathCache> CanonPathCache;
mutable llvm::sys::Mutex VisibleCacheMtx;
std::unordered_set<db::IDCode> VisibleMainFiles;
std::unordered_map<db::IDCode, unsigned> MainFilesRefCount;
std::unordered_map<db::IDCode, bool> UnitVisibilityCache;
std::unordered_set<db::IDCode> OutUnitFiles;
bool UseExplicitOutputUnits;
public:
FileVisibilityChecker(db::DatabaseRef dbase,
std::shared_ptr<CanonicalPathCache> canonPathCache,
bool useExplicitOutputUnits);
void registerMainFiles(ArrayRef<StringRef> filePaths, StringRef productName);
void unregisterMainFiles(ArrayRef<StringRef> filePaths, StringRef productName);
void addUnitOutFilePaths(ArrayRef<StringRef> filePaths);
void removeUnitOutFilePaths(ArrayRef<StringRef> filePaths);
bool isUnitVisible(const db::UnitInfo &unitInfo, db::ReadTransaction &reader);
};
} // namespace index
} // namespace IndexStoreDB
#endif
|