|  | //===-- 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 "llvm/ADT/ArrayRef.h" | 
|  | #include <tuple> | 
|  |  | 
|  | 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<std::tuple<uint8_t, uint8_t, uint8_t>> ColorMap; | 
|  | ArrayRef<std::tuple<uint8_t, uint8_t, uint8_t>> 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<uint8_t, uint8_t, uint8_t> getColorTuple(double Point) const; | 
|  |  | 
|  | std::string getColorString(double Point) const; | 
|  |  | 
|  | // Get the Default color, at the moment allways black. | 
|  | std::tuple<uint8_t, uint8_t, uint8_t> 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<uint8_t, uint8_t, uint8_t> t); | 
|  | }; | 
|  | } // namespace xray | 
|  | } // namespace llvm | 
|  | #endif |