LSST Applications 27.0.0,g0265f82a02+469cd937ee,g02d81e74bb+21ad69e7e1,g1470d8bcf6+cbe83ee85a,g2079a07aa2+e67c6346a6,g212a7c68fe+04a9158687,g2305ad1205+94392ce272,g295015adf3+81dd352a9d,g2bbee38e9b+469cd937ee,g337abbeb29+469cd937ee,g3939d97d7f+72a9f7b576,g487adcacf7+71499e7cba,g50ff169b8f+5929b3527e,g52b1c1532d+a6fc98d2e7,g591dd9f2cf+df404f777f,g5a732f18d5+be83d3ecdb,g64a986408d+21ad69e7e1,g858d7b2824+21ad69e7e1,g8a8a8dda67+a6fc98d2e7,g99cad8db69+f62e5b0af5,g9ddcbc5298+d4bad12328,ga1e77700b3+9c366c4306,ga8c6da7877+71e4819109,gb0e22166c9+25ba2f69a1,gb6a65358fc+469cd937ee,gbb8dafda3b+69d3c0e320,gc07e1c2157+a98bf949bb,gc120e1dc64+615ec43309,gc28159a63d+469cd937ee,gcf0d15dbbd+72a9f7b576,gdaeeff99f8+a38ce5ea23,ge6526c86ff+3a7c1ac5f1,ge79ae78c31+469cd937ee,gee10cc3b42+a6fc98d2e7,gf1cff7945b+21ad69e7e1,gfbcc870c63+9a11dc8c8f
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.