LSST Applications g1653933729+34a971ddd9,g1a997c3884+34a971ddd9,g2160c40384+da0d0eec6b,g28da252d5a+cb6ff358b6,g2bbee38e9b+e5a1bc5b38,g2bc492864f+e5a1bc5b38,g2ca4be77d2+2af33ed832,g2cdde0e794+704103fe75,g3156d2b45e+6e87dc994a,g347aa1857d+e5a1bc5b38,g35bb328faa+34a971ddd9,g3a166c0a6a+e5a1bc5b38,g3e281a1b8c+8ec26ec694,g4005a62e65+ba0306790b,g414038480c+9f5be647b3,g41af890bb2+f34483f65b,g5065538af8+53fd6e9482,g5a0bb5165c+1b31a0decc,g717e5f8c0f+19a1ad098c,g80478fca09+1acdc24a0d,g8204df1d8d+19a1ad098c,g82479be7b0+44a04e1d61,g858d7b2824+19a1ad098c,g9125e01d80+34a971ddd9,ga5288a1d22+ad6d5da1a4,gae0086650b+34a971ddd9,gb58c049af0+ace264a4f2,gbd397ab92a+d5fd0218dc,gc28159a63d+e5a1bc5b38,gcf0d15dbbd+618cb38075,gd6b7c0dfd1+3388d854ad,gda6a2b7d83+618cb38075,gdaeeff99f8+7774323b41,ge2409df99d+8082276ac0,ge33fd446bb+19a1ad098c,ge79ae78c31+e5a1bc5b38,gf0baf85859+890af219f9,gf5289d68f6+701f7b396a,w.2024.37
LSST Data Management Base Package
Loading...
Searching...
No Matches
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
std::ostream * os
Definition Schema.cc:557
Channel provides input/output of AST objects.
Definition Channel.h:60
virtual ~Channel()
Definition Channel.cc:45
void setIndent(int indent)
Set Indent: indentation increment between objects.
Definition Channel.h:117
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.