Loading [MathJax]/extensions/tex2jax.js
LSST Applications g0fba68d861+7a5e04273c,g1ec0fe41b4+e220e2fb2f,g1fd858c14a+46aa96e35a,g35bb328faa+fcb1d3bbc8,g4d2262a081+0401f777d9,g53246c7159+fcb1d3bbc8,g56a49b3a55+6dde5ca9af,g60b5630c4e+f81e3c6253,g67b6fd64d1+fad15079a7,g78460c75b0+2f9a1b4bcd,g786e29fd12+cf7ec2a62a,g8180f54f50+37e0867462,g824a5327fb+3effcb5f7d,g8352419a5c+fcb1d3bbc8,g8852436030+6fb7fc75dc,g89139ef638+fad15079a7,g9125e01d80+fcb1d3bbc8,g94187f82dc+f81e3c6253,g989de1cb63+fad15079a7,g9ccd5d7f00+cce09d2c12,g9d31334357+f81e3c6253,g9f33ca652e+b134ec2ed3,gabe3b4be73+1e0a283bba,gabf8522325+94c30d56e9,gb1101e3267+afdd7c51d9,gb58c049af0+f03b321e39,gb89ab40317+fad15079a7,gc0af124501+3c4db12c16,gcf25f946ba+6fb7fc75dc,gd6cbbdb0b4+8d7f1baacb,gdb1c4ca869+16879ca1a6,gde0f65d7ad+c1c55904c1,ge1ad929117+f81e3c6253,ge278dab8ac+4d6e48c014,ge410e46f29+fad15079a7,gf5e32f922b+fcb1d3bbc8,gf618743f1b+445e15116c,gf67bdafdda+fad15079a7,w.2025.17
LSST Data Management Base Package
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Channel.h
Go to the documentation of this file.
1/*
2 * LSST Data Management System
3 * Copyright 2017 AURA/LSST.
4 *
5 * This product includes software developed by the
6 * LSST Project (http://www.lsst.org/).
7 *
8 * This program is free software: you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation, either version 3 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the LSST License Statement and
19 * the GNU General Public License along with this program. If not,
20 * see <https://www.lsstcorp.org/LegalNotices/>.
21 */
22#ifndef ASTSHIM_CHANNEL_H
23#define ASTSHIM_CHANNEL_H
24
25#include <memory>
26#include <ostream>
27
28#include "astshim/base.h"
29#include "astshim/Object.h"
30#include "astshim/Stream.h"
31
32namespace ast {
33
34class KeyMap;
35
60class Channel : public Object {
61 friend class Object;
62
63public:
74 explicit Channel(Stream &stream, std::string const &options = "");
75
76 virtual ~Channel();
77
78 Channel(Channel const &) = delete;
79 Channel(Channel &&) = default;
80 Channel &operator=(Channel const &) = delete;
81 Channel &operator=(Channel &&) = default;
82
85 throw std::logic_error(
86 "Channel cannot be deep copied because its contained stream cannot be deep copied");
87 }
88
90 bool getComment() const { return getB("Comment"); }
91
93 int getFull() const { return getI("Full"); }
94
96 int getIndent() const { return getB("Indent"); }
97
99 int getReportLevel() const { return getI("ReportLevel"); }
100
102 bool getSkip() const { return getB("Skip"); }
103
105 bool getStrict() const { return getB("Strict"); }
106
109
111 void setComment(bool skip) { setB("Comment", skip); }
112
114 void setFull(int full) { setI("Full", full); }
115
117 void setIndent(int indent) { setI("Indent", indent); }
118
125 void setReportLevel(int level) {
126 if ((level < 0) || (level > 3)) {
128 os << "level = " << level << " not in range [0, 3]";
129 throw std::invalid_argument(os.str());
130 }
131 setI("ReportLevel", level);
132 }
133
135 void setSkip(bool skip) { setB("Skip", skip); }
136
138 void setStrict(bool strict) { setB("Strict", strict); }
139
153 KeyMap warnings() const;
154
156 int write(Object const &object);
157
158protected:
160
170 explicit Channel(AstChannel *chan, Stream &stream, bool isFits=false);
171
177 explicit Channel(AstChannel *chan);
178
179private:
180 Stream _stream;
181};
182
183} // namespace ast
184
185#endif
virtual ~Channel()
Definition Channel.cc:45
void setIndent(int indent)
Set Indent: indentation increment between objects.
Definition Channel.h:117
friend class Object
Definition Channel.h:61
bool getStrict() const
Get Strict: generate errors instead of warnings?
Definition Channel.h:105
Channel & operator=(Channel const &)=delete
int getFull() const
Get Full: level of output detail; one of -1: minimum, 0: normal, 1: verbose.
Definition Channel.h:93
Channel & operator=(Channel &&)=default
void setComment(bool skip)
Set Comment: include textual comments in output?
Definition Channel.h:111
Channel(Channel &&)=default
KeyMap warnings() const
Return a KeyMap holding the text of any warnings issued as a result of the previous invocation of rea...
Definition Channel.cc:67
int getReportLevel() const
Get ReportLevel: report level.
Definition Channel.h:99
Channel(Stream &stream, std::string const &options="")
Construct a channel that uses a provided Stream.
Definition Channel.cc:31
void setStrict(bool strict)
Set Strict: generate errors instead of warnings?
Definition Channel.h:138
virtual std::shared_ptr< Object > copyPolymorphic() const override
Return a deep copy of this object.
Definition Channel.h:159
Channel(Channel const &)=delete
bool getComment() const
Get Comment: include textual comments in output?
Definition Channel.h:90
void setReportLevel(int level)
Set ReportLevel: report level; an integer in the range [0, 3] where 0 is the most verbose.
Definition Channel.h:125
void setSkip(bool skip)
Set Skip: skip irrelevant data on input?
Definition Channel.h:135
std::shared_ptr< Channel > copy() const
Return a deep copy of this object.
Definition Channel.h:84
bool getSkip() const
Get Skip: skip irrelevant data on input?
Definition Channel.h:102
int getIndent() const
Get Indent: indentation increment between objects.
Definition Channel.h:96
std::shared_ptr< Object > read()
Read an object from a channel.
Definition Channel.cc:52
int write(Object const &object)
Write an object to a channel.
Definition Channel.cc:61
void setFull(int full)
Set Full: level of output detail; one of -1: minimum, 0: normal, 1: verbose.
Definition Channel.h:114
KeyMap is used to store a set of values with associated keys which identify the values.
Definition KeyMap.h:83
Abstract base class for all AST objects.
Definition Object.h:51
void setI(std::string const &attrib, int value)
Set the value of an attribute as an int.
Definition Object.h:496
bool getB(std::string const &attrib) const
Get the value of an attribute as a bool.
Definition Object.h:348
int getI(std::string const &attrib) const
Get the value of an attribute as an int.
Definition Object.cc:178
void setB(std::string const &attrib, bool value)
Set the value of an attribute as a bool.
Definition Object.h:448
A stream for ast::Channel.
Definition Stream.h:41
AST wrapper classes and functions.
T str(T... args)