WSF
WsfCoverageTextOutputWriter.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2020 Infoscitex, a DCS Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFCOVERAGETEXTOUTPUTWRITER_HPP
13#define WSFCOVERAGETEXTOUTPUTWRITER_HPP
14
15#include "wsf_coverage_export.h"
16
17#include <fstream>
18#include <iomanip>
19#include <memory>
20#include <sstream>
21#include <string>
22
23namespace wsf
24{
25namespace coverage
26{
27
33class WSF_COVERAGE_EXPORT TextOutputWriter
34{
35public:
36 TextOutputWriter() = default;
38 virtual ~TextOutputWriter() = default;
39
40 virtual TextOutputWriter* Clone() const { return new TextOutputWriter{*this}; }
41 virtual bool OpenStream(const std::string& aFileName);
42 virtual void CloseStream();
43
45 virtual std::ostream& GetStream() { return mStream; }
46
47 virtual bool CreateContainingFolder(const std::string& aPath) const;
48
53 bool OpenFile(const std::string& aOutputDir, const std::string& aFileName);
54
56 int GetPrecision() const { return mPrecision; }
57
59 int GetWidth() const { return mWidth; }
60
62 bool IsRightJustified() const { return mRightJustify; }
63
65 bool IsFixedFormat() const { return mFixedFormat; }
66
68 void SetPrecision(int aPrecision) { mPrecision = aPrecision; }
69
71 void SetWidth(int aWidth) { mWidth = aWidth; }
72
77 void SetRightJustified(bool aRightJustify) { mRightJustify = aRightJustify; }
78
83 void SetFixedFormat(bool aFixedFormat) { mFixedFormat = aFixedFormat; }
84
95 template<typename T>
96 void WriteFieldWidth(const T& aValue, int aWidth, bool aEndLine = false)
97 {
98 std::stringstream field{};
99 field << (mFixedFormat ? std::fixed : std::scientific);
100 field << aValue;
101 if (!aEndLine)
102 {
103 field << ",";
104 }
105 GetStream() << std::setw(aWidth) << field.str();
106 GetStream() << (aEndLine ? "\n" : " ");
107 }
108
117 template<typename T>
118 void WriteField(const T& aValue, bool aEndLine = false)
119 {
120 WriteFieldWidth(aValue, mWidth, aEndLine);
121 }
122
123 void SetStreamJustify();
124 void SetStreamFormat();
125
126 static constexpr int cMIN_PRECISION{6};
127 static constexpr int cDEFAULT_PRECISION{6};
128 static constexpr int cMAX_PRECISION{20};
129 static constexpr int cMIN_WIDTH{9};
130 static constexpr int cDEFAULT_WIDTH{15};
131 static constexpr int cMAX_WIDTH{23};
132
133private:
134 int mPrecision{cDEFAULT_PRECISION};
135 int mWidth{cDEFAULT_WIDTH};
136 bool mRightJustify{true};
137 bool mFixedFormat{true};
138 std::ofstream mStream{};
139};
140
141} // namespace coverage
142} // namespace wsf
143
144#endif // WSFCOVERAGETEXTOUTPUTWRITER_HPP
static constexpr int cDEFAULT_PRECISION
Definition WsfCoverageTextOutputWriter.hpp:127
void SetFixedFormat(bool aFixedFormat)
Definition WsfCoverageTextOutputWriter.hpp:83
virtual std::ostream & GetStream()
Return the underlying stream object.
Definition WsfCoverageTextOutputWriter.hpp:45
int GetWidth() const
Get the field width.
Definition WsfCoverageTextOutputWriter.hpp:59
void SetPrecision(int aPrecision)
Set the field precision.
Definition WsfCoverageTextOutputWriter.hpp:68
void SetWidth(int aWidth)
Set the field width.
Definition WsfCoverageTextOutputWriter.hpp:71
static constexpr int cMAX_PRECISION
Definition WsfCoverageTextOutputWriter.hpp:128
void WriteFieldWidth(const T &aValue, int aWidth, bool aEndLine=false)
Definition WsfCoverageTextOutputWriter.hpp:96
bool IsFixedFormat() const
Return if output should be in fixed format.
Definition WsfCoverageTextOutputWriter.hpp:65
virtual TextOutputWriter * Clone() const
Definition WsfCoverageTextOutputWriter.hpp:40
int GetPrecision() const
Get the field precision.
Definition WsfCoverageTextOutputWriter.hpp:56
void WriteField(const T &aValue, bool aEndLine=false)
Definition WsfCoverageTextOutputWriter.hpp:118
bool IsRightJustified() const
Return if output should be right justified.
Definition WsfCoverageTextOutputWriter.hpp:62
void SetRightJustified(bool aRightJustify)
Definition WsfCoverageTextOutputWriter.hpp:77
static constexpr int cMIN_PRECISION
Definition WsfCoverageTextOutputWriter.hpp:126
static constexpr int cMIN_WIDTH
Definition WsfCoverageTextOutputWriter.hpp:129
static constexpr int cMAX_WIDTH
Definition WsfCoverageTextOutputWriter.hpp:131
virtual ~TextOutputWriter()=default
static constexpr int cDEFAULT_WIDTH
Definition WsfCoverageTextOutputWriter.hpp:130
Definition WsfCoverage.cpp:35
Function definitions for those who need run-time access to the version.
Definition WsfComm.cpp:32
Copyrights Multiple, All Rights Reserved