timemory 3.3.0
Modular C++ Toolkit for Performance Analysis and Logging. Profiling API and Tools for C, C++, CUDA, Fortran, and Python. The C++ template API is essentially a framework to creating tools: it is designed to provide a unifying interface for recording various performance measurements alongside data logging and interfaces to other tools.
tim::stl::ostream Namespace Reference

the namespace provides overloads to output complex data types w/ streams More...

Functions

template<template< typename... > class Tuple, typename... Types, size_t... Idx>
void tuple_printer (const Tuple< Types... > &obj, std::ostream &os, index_sequence< Idx... >)
 
template<typename T , typename U >
std::ostream & operator<< (std::ostream &, const std::pair< T, U > &)
 
template<typename... Types>
std::ostream & operator<< (std::ostream &, const std::tuple< Types... > &)
 
template<typename Tp , typename... Extra>
std::ostream & operator<< (std::ostream &, const std::vector< Tp, Extra... > &)
 
template<typename Tp , size_t N>
std::ostream & operator<< (std::ostream &, const std::array< Tp, N > &)
 
template<typename Tp , typename... ExtraT>
std::ostream & operator<< (std::ostream &os, const std::vector< Tp, ExtraT... > &p)
 

Detailed Description

the namespace provides overloads to output complex data types w/ streams

Function Documentation

◆ operator<<() [1/5]

template<typename Tp , size_t N>
std::ostream & tim::stl::ostream::operator<< ( std::ostream &  os,
const std::array< Tp, N > &  p 
)

Definition at line 107 of file stl.hpp.

109{
110 os << "(";
111 for(size_t i = 0; i < p.size(); ++i)
112 os << p.at(i) << ((i + 1 < p.size()) ? "," : "");
113 os << ")";
114 return os;
115}
const std::string std::ostream * os

References tim::os.

◆ operator<<() [2/5]

template<typename T , typename U >
std::ostream & tim::stl::ostream::operator<< ( std::ostream &  os,
const std::pair< T, U > &  p 
)

Definition at line 79 of file stl.hpp.

81{
82 os << "(" << p.first << "," << p.second << ")";
83 return os;
84}

References tim::os.

◆ operator<<() [3/5]

template<typename... Types>
std::ostream & tim::stl::ostream::operator<< ( std::ostream &  os,
const std::tuple< Types... > &  p 
)

Definition at line 87 of file stl.hpp.

89{
90 constexpr size_t N = sizeof...(Types);
92 return os;
93}
void tuple_printer(const Tuple< Types... > &obj, std::ostream &os, index_sequence< Idx... >)
Definition: stl.hpp:119
std::make_integer_sequence< size_t, Num > make_index_sequence
Alias template make_index_sequence.
Definition: types.hpp:182

References tim::os, and tuple_printer().

◆ operator<<() [4/5]

template<typename Tp , typename... Extra>
std::ostream & tim::stl::ostream::operator<< ( std::ostream &  ,
const std::vector< Tp, Extra... > &   
)

◆ operator<<() [5/5]

template<typename Tp , typename... ExtraT>
std::ostream & tim::stl::ostream::operator<< ( std::ostream &  os,
const std::vector< Tp, ExtraT... > &  p 
)

Definition at line 96 of file stl.hpp.

98{
99 os << "(";
100 for(size_t i = 0; i < p.size(); ++i)
101 os << p.at(i) << ((i + 1 < p.size()) ? "," : "");
102 os << ")";
103 return os;
104}

References tim::os.

◆ tuple_printer()

template<template< typename... > class Tuple, typename... Types, size_t... Idx>
void tim::stl::ostream::tuple_printer ( const Tuple< Types... > &  obj,
std::ostream &  os,
index_sequence< Idx... >   
)

Definition at line 119 of file stl.hpp.

120{
121 using namespace ::tim::stl::ostream;
122 constexpr size_t N = sizeof...(Types);
123
124 if(N > 0)
125 os << "(";
126 char delim[N];
127 TIMEMORY_FOLD_EXPRESSION(delim[Idx] = ',');
128 delim[N - 1] = '\0';
129 TIMEMORY_FOLD_EXPRESSION(os << std::get<Idx>(obj) << delim[Idx]);
130 if(N > 0)
131 os << ")";
132}
the namespace provides overloads to output complex data types w/ streams
#define TIMEMORY_FOLD_EXPRESSION(...)
Definition: types.hpp:56

References tim::os, and TIMEMORY_FOLD_EXPRESSION.

Referenced by operator<<().