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
|
//===-- LVSupport.cpp -----------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// This implements the supporting functions.
//
//===----------------------------------------------------------------------===//
#include "llvm/DebugInfo/LogicalView/Core/LVSupport.h"
#include "llvm/Support/FormatAdapters.h"
#include "llvm/Support/FormatVariadic.h"
#include <iomanip>
using namespace llvm;
using namespace llvm::logicalview;
#define DEBUG_TYPE "Support"
namespace {
// Unique string pool instance used by all logical readers.
LVStringPool StringPool;
} // namespace
LVStringPool &llvm::logicalview::getStringPool() { return StringPool; }
// Perform the following transformations to the given 'Path':
// - all characters to lowercase.
// - '\\' into '/' (Platform independent).
// - '//' into '/'
std::string llvm::logicalview::transformPath(StringRef Path) {
std::string Name(Path);
std::transform(Name.begin(), Name.end(), Name.begin(), tolower);
std::replace(Name.begin(), Name.end(), '\\', '/');
// Remove all duplicate slashes.
size_t Pos = 0;
while ((Pos = Name.find("//", Pos)) != std::string::npos)
Name.erase(Pos, 1);
return Name;
}
// Convert the given 'Path' to lowercase and change any matching character
// from 'CharSet' into '_'.
// The characters in 'CharSet' are:
// '/', '\', '<', '>', '.', ':', '%', '*', '?', '|', '"', ' '.
std::string llvm::logicalview::flattenedFilePath(StringRef Path) {
std::string Name(Path);
std::transform(Name.begin(), Name.end(), Name.begin(), tolower);
const char *CharSet = "/\\<>.:%*?|\" ";
char *Input = Name.data();
while (Input && *Input) {
Input = strpbrk(Input, CharSet);
if (Input)
*Input++ = '_';
};
return Name;
}
|