//===-- xray-graph.h - XRay Function Call Graph Renderer --------*- 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 // //===----------------------------------------------------------------------===// // // A class to get a color from a specified gradient. // //===----------------------------------------------------------------------===// #ifndef XRAY_COLOR_HELPER_H #define XRAY_COLOR_HELPER_H #include #include "llvm/ADT/ArrayRef.h" namespace llvm { namespace xray { /// The color helper class it a healper class which allows you to easily get a /// color in a gradient. This is used to color-code edges in XRay-Graph tools. /// /// There are two types of color schemes in this class: /// - Sequential schemes, which are used to represent information from some /// minimum to some maximum. These take an input in the range [0,1] /// - Diverging schemes, which are used to represent information representing /// differenes, or a range that goes from negative to positive. These take /// an input in the range [-1,1]. /// Usage; /// ColorHelper S(ColorHelper::SequentialScheme::OrRd); //Chose a color scheme. /// for (double p = 0.0; p <= 1; p += 0.1){ /// cout() << S.getColor(p) << " \n"; // Sample the gradient at 0.1 intervals /// } /// /// ColorHelper D(ColorHelper::DivergingScheme::Spectral); // Choose a color /// // scheme. /// for (double p= -1; p <= 1 ; p += 0.1){ /// cout() << D.getColor(p) << " \n"; // sample the gradient at 0.1 intervals /// } class ColorHelper { double MinIn; double MaxIn; ArrayRef> ColorMap; ArrayRef> BoundMap; public: /// Enum of the availible Sequential Color Schemes enum class SequentialScheme { // Schemes based on the ColorBrewer Color schemes of the same name from // http://www.colorbrewer.org/ by Cynthis A Brewer Penn State University. Greys, OrRd, PuBu }; ColorHelper(SequentialScheme S); /// Enum of the availible Diverging Color Schemes enum class DivergingScheme { // Schemes based on the ColorBrewer Color schemes of the same name from // http://www.colorbrewer.org/ by Cynthis A Brewer Penn State University. PiYG }; ColorHelper(DivergingScheme S); // Sample the gradient at the input point. std::tuple getColorTuple(double Point) const; std::string getColorString(double Point) const; // Get the Default color, at the moment allways black. std::tuple getDefaultColorTuple() const { return std::make_tuple(0, 0, 0); } std::string getDefaultColorString() const { return "black"; } // Convert a tuple to a string static std::string getColorString(std::tuple t); }; } // namespace xray } // namespace llvm #endif