LSST Applications g063fba187b+ea58ee1f2e,g0f08755f38+c959026f09,g12f32b3c4e+e8fc1d5a1e,g1653933729+a8ce1bb630,g168dd56ebc+a8ce1bb630,g1a0ca8cf93+2f198f2aa8,g28da252d5a+7e025d8f94,g2bbee38e9b+c076ca1133,g2bc492864f+c076ca1133,g3156d2b45e+41e33cbcdc,g347aa1857d+c076ca1133,g35bb328faa+a8ce1bb630,g3a166c0a6a+c076ca1133,g3e281a1b8c+b162652f75,g414038480c+6cfc39b08c,g41af890bb2+d4c324d475,g5fbc88fb19+17cd334064,g6b1c1869cb+878204452a,g781aacb6e4+a8ce1bb630,g7e767a00ed+7def0f636c,g80478fca09+a0d7f63753,g82479be7b0+60cf5d37e7,g8554a5dd34+0e332c04ee,g858d7b2824+c959026f09,g89c8672015+ff349045bf,g9125e01d80+a8ce1bb630,g9726552aa6+3a8748fa0c,ga5288a1d22+59736ba80c,gb58c049af0+d64f4d3760,gc28159a63d+c076ca1133,gcf0d15dbbd+efb7d8614d,gda3e153d99+c959026f09,gda6a2b7d83+efb7d8614d,gdaeeff99f8+1711a396fd,ge2409df99d+2c01d16122,ge79ae78c31+c076ca1133,gf0baf85859+50e8a91c63,gfb92a5be7c+c959026f09,w.2024.47
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.