LCOV - code coverage report
Current view: top level - include/llvm/Support - FormatCommon.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 18 22 81.8 %
Date: 2018-10-20 13:21:21 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- FormatAdapters.h - Formatters for common LLVM types -----*- C++ -*-===//
       2             : //
       3             : //                     The LLVM Compiler Infrastructure
       4             : //
       5             : // This file is distributed under the University of Illinois Open Source
       6             : // License. See LICENSE.TXT for details.
       7             : //
       8             : //===----------------------------------------------------------------------===//
       9             : 
      10             : #ifndef LLVM_SUPPORT_FORMATCOMMON_H
      11             : #define LLVM_SUPPORT_FORMATCOMMON_H
      12             : 
      13             : #include "llvm/ADT/SmallString.h"
      14             : #include "llvm/Support/FormatVariadicDetails.h"
      15             : #include "llvm/Support/raw_ostream.h"
      16             : 
      17             : namespace llvm {
      18             : enum class AlignStyle { Left, Center, Right };
      19             : 
      20             : struct FmtAlign {
      21             :   detail::format_adapter &Adapter;
      22             :   AlignStyle Where;
      23             :   size_t Amount;
      24             :   char Fill;
      25             : 
      26             :   FmtAlign(detail::format_adapter &Adapter, AlignStyle Where, size_t Amount,
      27             :            char Fill = ' ')
      28      118105 :       : Adapter(Adapter), Where(Where), Amount(Amount), Fill(Fill) {}
      29             : 
      30      118105 :   void format(raw_ostream &S, StringRef Options) {
      31             :     // If we don't need to align, we can format straight into the underlying
      32             :     // stream.  Otherwise we have to go through an intermediate stream first
      33             :     // in order to calculate how long the output is so we can align it.
      34             :     // TODO: Make the format method return the number of bytes written, that
      35             :     // way we can also skip the intermediate stream for left-aligned output.
      36      118105 :     if (Amount == 0) {
      37      114008 :       Adapter.format(S, Options);
      38      116413 :       return;
      39             :     }
      40             :     SmallString<64> Item;
      41             :     raw_svector_ostream Stream(Item);
      42             : 
      43        4097 :     Adapter.format(Stream, Options);
      44        8194 :     if (Amount <= Item.size()) {
      45             :       S << Item;
      46             :       return;
      47             :     }
      48             : 
      49        1692 :     size_t PadAmount = Amount - Item.size();
      50        1692 :     switch (Where) {
      51             :     case AlignStyle::Left:
      52             :       S << Item;
      53         177 :       fill(S, PadAmount);
      54         177 :       break;
      55         150 :     case AlignStyle::Center: {
      56         150 :       size_t X = PadAmount / 2;
      57         150 :       fill(S, X);
      58             :       S << Item;
      59         150 :       fill(S, PadAmount - X);
      60         150 :       break;
      61             :     }
      62        1365 :     default:
      63        1365 :       fill(S, PadAmount);
      64             :       S << Item;
      65             :       break;
      66             :     }
      67             :   }
      68             : 
      69             : private:
      70           0 :   void fill(llvm::raw_ostream &S, uint32_t Count) {
      71           0 :     for (uint32_t I = 0; I < Count; ++I)
      72           0 :       S << Fill;
      73           0 :   }
      74             : };
      75             : }
      76             : 
      77             : #endif

Generated by: LCOV version 1.13