LCOV - code coverage report
Current view: top level - include/llvm/Support - Printable.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 3 3 100.0 %
Date: 2017-09-14 15:23:50 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===--- Printable.h - Print function helpers -------------------*- 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             : //  This file defines the Printable struct.
      11             : //
      12             : //===----------------------------------------------------------------------===//
      13             : 
      14             : #ifndef LLVM_SUPPORT_PRINTABLE_H
      15             : #define LLVM_SUPPORT_PRINTABLE_H
      16             : 
      17             : #include <functional>
      18             : 
      19             : namespace llvm {
      20             : 
      21             : class raw_ostream;
      22             : 
      23             : /// Simple wrapper around std::function<void(raw_ostream&)>.
      24             : /// This class is useful to construct print helpers for raw_ostream.
      25             : ///
      26             : /// Example:
      27             : ///     Printable PrintRegister(unsigned Register) {
      28             : ///       return Printable([Register](raw_ostream &OS) {
      29             : ///         OS << getRegisterName(Register);
      30             : ///       }
      31             : ///     }
      32             : ///     ... OS << PrintRegister(Register); ...
      33             : ///
      34             : /// Implementation note: Ideally this would just be a typedef, but doing so
      35             : /// leads to operator << being ambiguous as function has matching constructors
      36             : /// in some STL versions. I have seen the problem on gcc 4.6 libstdc++ and
      37             : /// microsoft STL.
      38      651026 : class Printable {
      39             : public:
      40             :   std::function<void(raw_ostream &OS)> Print;
      41             :   Printable(std::function<void(raw_ostream &OS)> Print)
      42      651026 :       : Print(std::move(Print)) {}
      43             : };
      44             : 
      45             : static inline raw_ostream &operator<<(raw_ostream &OS, const Printable &P) {
      46      651026 :   P.Print(OS);
      47             :   return OS;
      48             : }
      49             : 
      50             : }
      51             : 
      52             : #endif

Generated by: LCOV version 1.13