forked from LLNL/Caliper
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOutputStream.h
83 lines (64 loc) · 2.09 KB
/
OutputStream.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright (c) 2015-2022, Lawrence Livermore National Security, LLC.
// See top-level LICENSE file for details.
/// \file OutputStream.h
/// Manage output streams
#pragma once
#include "Entry.h"
#include <iostream>
#include <memory>
#include <vector>
namespace cali
{
class CaliperMetadataAccessInterface;
/// \class OutputStream
/// \brief A simple stream abstraction class.
/// Handles file streams/stdout/stderr.
class OutputStream
{
struct OutputStreamImpl;
std::shared_ptr<OutputStreamImpl> mP;
public:
enum StreamType {
None,
StdOut,
StdErr,
File,
User
};
/// \brief Returns \a true if the stream is initialized, otherwise
/// returns \a false
operator bool() const;
StreamType type() const;
/// \brief Return a C++ ostream. Opens/creates the underlying file stream
/// if needed.
std::ostream* stream();
OutputStream();
~OutputStream();
/// \brief Set stream type. (Note: for file streams, use \a set_filename).
void
set_stream(StreamType type);
/// \brief Assign a user-given stream
void
set_stream(std::ostream* os);
/// \brief Set stream's file name to \a filename
void
set_filename(const char* filename);
/// \brief Create stream's filename from the given format string pattern and
/// entry list.
///
/// The filename is created from the format string \a formatstr.
/// The format string can include attribute names enclosed with '%',
/// (i.e., "%attribute.name%"). These fields will be replaced with the value
/// attribute in the given record \a rec.
///
/// For example, the format string "out-%mpi.rank%.txt" will result in a
// file name like "out-0.txt" using the \a mpi.rank value in \a rec.
///
/// The special values "stdout" and "stderr" for \a formatstr will redirect
/// output to standard out and standard error, respectively.
void
set_filename(const char* formatstr,
const CaliperMetadataAccessInterface& db,
const std::vector<Entry>& rec);
};
}