You've already forked llvm-project
mirror of
https://github.com/encounter/llvm-project.git
synced 2026-03-30 11:27:19 -07:00
50 lines
1.5 KiB
C++
50 lines
1.5 KiB
C++
|
|
//===- InMemoryModuleCache.cpp - Cache for loaded memory buffers ----------===//
|
||
|
|
//
|
||
|
|
// 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 "clang/Serialization/InMemoryModuleCache.h"
|
||
|
|
#include "llvm/Support/MemoryBuffer.h"
|
||
|
|
|
||
|
|
using namespace clang;
|
||
|
|
|
||
|
|
llvm::MemoryBuffer &
|
||
|
|
InMemoryModuleCache::addBuffer(llvm::StringRef Filename,
|
||
|
|
std::unique_ptr<llvm::MemoryBuffer> Buffer) {
|
||
|
|
auto Insertion = PCMs.insert({Filename, PCM{std::move(Buffer), NextIndex++}});
|
||
|
|
assert(Insertion.second && "Already has a buffer");
|
||
|
|
return *Insertion.first->second.Buffer;
|
||
|
|
}
|
||
|
|
|
||
|
|
llvm::MemoryBuffer *
|
||
|
|
InMemoryModuleCache::lookupBuffer(llvm::StringRef Filename) {
|
||
|
|
auto I = PCMs.find(Filename);
|
||
|
|
if (I == PCMs.end())
|
||
|
|
return nullptr;
|
||
|
|
return I->second.Buffer.get();
|
||
|
|
}
|
||
|
|
|
||
|
|
bool InMemoryModuleCache::isBufferFinal(llvm::StringRef Filename) {
|
||
|
|
auto I = PCMs.find(Filename);
|
||
|
|
if (I == PCMs.end())
|
||
|
|
return false;
|
||
|
|
return I->second.Index < FirstRemovableIndex;
|
||
|
|
}
|
||
|
|
|
||
|
|
bool InMemoryModuleCache::tryToRemoveBuffer(llvm::StringRef Filename) {
|
||
|
|
auto I = PCMs.find(Filename);
|
||
|
|
assert(I != PCMs.end() && "No buffer to remove...");
|
||
|
|
if (I->second.Index < FirstRemovableIndex)
|
||
|
|
return true;
|
||
|
|
|
||
|
|
PCMs.erase(I);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
void InMemoryModuleCache::finalizeCurrentBuffers() {
|
||
|
|
FirstRemovableIndex = NextIndex;
|
||
|
|
}
|