brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · 384eef5 Raw
67 lines · cpp
1//===- DiagTool.cpp - Classes for defining diagtool tools -----------------===//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-exception6//7//===----------------------------------------------------------------------===//8//9// This file implements the boilerplate for defining diagtool tools.10//11//===----------------------------------------------------------------------===//12 13#include "DiagTool.h"14#include "llvm/ADT/StringMap.h"15#include "llvm/ADT/STLExtras.h"16#include <vector>17 18using namespace diagtool;19 20DiagTool::DiagTool(llvm::StringRef toolCmd, llvm::StringRef toolDesc)21    : cmd(std::string(toolCmd)), description(std::string(toolDesc)) {}22 23DiagTool::~DiagTool() {}24 25typedef llvm::StringMap<DiagTool *> ToolMap;26static inline ToolMap *getTools(void *v) { return static_cast<ToolMap*>(v); }27 28DiagTools::DiagTools() : tools(new ToolMap()) {}29DiagTools::~DiagTools() { delete getTools(tools); }30 31DiagTool *DiagTools::getTool(llvm::StringRef toolCmd) {32  ToolMap::iterator it = getTools(tools)->find(toolCmd);33  return (it == getTools(tools)->end()) ? nullptr : it->getValue();34}35 36void DiagTools::registerTool(DiagTool *tool) {37  (*getTools(tools))[tool->getName()] = tool;38}39 40void DiagTools::printCommands(llvm::raw_ostream &out) {41  std::vector<llvm::StringRef> toolNames;42  unsigned maxName = 0;43  for (ToolMap::iterator it = getTools(tools)->begin(),44       ei = getTools(tools)->end(); it != ei; ++it) {45    toolNames.push_back(it->getKey());46    unsigned len = it->getKey().size();47    if (len > maxName)48      maxName = len;    49  }50  llvm::sort(toolNames);51 52  for (std::vector<llvm::StringRef>::iterator it = toolNames.begin(),53       ei = toolNames.end(); it != ei; ++it) {54 55    out << "  " << (*it);56    unsigned spaces = (maxName + 3) - (it->size());57    for (unsigned i = 0; i < spaces; ++i)58      out << ' ';59    60    out << getTool(*it)->getDescription() << '\n';    61  }62}63 64namespace diagtool {65  llvm::ManagedStatic<DiagTools> diagTools;66}67