GSkyRegions.hpp
7.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
/***************************************************************************
* GSkyRegions.hpp - Sky region container class *
* ----------------------------------------------------------------------- *
* copyright (C) 2013-2014 by Pierrick Martin *
* ----------------------------------------------------------------------- *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
***************************************************************************/
/**
* @file GSkyRegions.hpp
* @brief Sky regions container class definition
* @author Pierrick Martin
*/
#ifndef GSKYREGIONS_HPP
#define GSKYREGIONS_HPP
/* __ Includes ___________________________________________________________ */
#include <string>
#include <vector>
#include "GContainer.hpp"
#include "GSkyRegion.hpp"
#include "GException.hpp"
#include "GSkyDir.hpp"
/***********************************************************************//**
* @class GSkyRegions
*
* @brief Sky region container class
*
* This container class collects sky regions objects derived from the
* GSkyRegion abstract class. These can be accessed from the access
* operator[] or through the at() method with index checking. Access to
* the region can be done from index or name, so the name of each region
* in the container has to be unique.
*
* The object can be initialised from a DS9 region file, and has load and
* save methods from/to a DS9 region file.
*
***************************************************************************/
class GSkyRegions : public GContainer {
public:
// Constructors and destructors
GSkyRegions(void);
GSkyRegions(const GSkyRegions& regions);
explicit GSkyRegions(const std::string& filename);
virtual ~GSkyRegions(void);
// Operators
GSkyRegions& operator=(const GSkyRegions& regions);
GSkyRegion* operator[](const int& index);
const GSkyRegion* operator[](const int& index) const;
GSkyRegion* operator[](const std::string& name);
const GSkyRegion* operator[](const std::string& name) const;
// Methods
void clear(void);
GSkyRegions* clone(void) const;
std::string classname(void) const;
GSkyRegion* at(const int& index);
const GSkyRegion* at(const int& index) const;
int size(void) const;
bool is_empty(void) const;
GSkyRegion* set(const int& index, const GSkyRegion& region);
GSkyRegion* set(const std::string& name, const GSkyRegion& region);
GSkyRegion* append(const GSkyRegion& region);
GSkyRegion* insert(const int& index, const GSkyRegion& region);
GSkyRegion* insert(const std::string& name, const GSkyRegion& region);
void remove(const int& index);
void remove(const std::string& name);
void reserve(const int& num);
void extend(const GSkyRegions& regions);
bool contains(const std::string& name) const;
bool contains(const GSkyDir& dir) const;
bool overlaps(const GSkyRegion& reg) const;
void load(const std::string& filename);
void save(const std::string& filename) const;
const std::string& filename(void) const;
std::string print(const GChatter& chatter = NORMAL) const;
protected:
// Protected methods
void init_members(void);
void copy_members(const GSkyRegions& regions);
void free_members(void);
int get_index(const std::string& name) const;
// Protected members
mutable std::string m_filename; //!< Filename of origin
std::vector<GSkyRegion*> m_regions; //!< List of regions
};
/***********************************************************************//**
* @brief Return class name
*
* @return String containing the class name ("GSkyRegions").
***************************************************************************/
inline
std::string GSkyRegions::classname(void) const
{
return ("GSkyRegions");
}
/***********************************************************************//**
* @brief Return pointer to region
*
* @param[in] index region index [0,...,size()-1].
*
* Returns a pointer to the region with the specified @p index.
***************************************************************************/
inline
GSkyRegion* GSkyRegions::operator[](const int& index)
{
return (m_regions[index]);
}
/***********************************************************************//**
* @brief Return pointer to region (const version)
*
* @param[in] index region index [0,...,size()-1].
*
* Returns a const pointer to the region with the specified @p index.
***************************************************************************/
inline
const GSkyRegion* GSkyRegions::operator[](const int& index) const
{
return (m_regions[index]);
}
/***********************************************************************//**
* @brief Return number of regions in container
*
* @return Number of regions in container.
*
* Returns the number of regions in the region container.
***************************************************************************/
inline
int GSkyRegions::size(void) const
{
return (m_regions.size());
}
/***********************************************************************//**
* @brief Signals if there are no regions in container
*
* @return True if container is empty, false otherwise.
*
* Signals if the region container does not contain any region.
***************************************************************************/
inline
bool GSkyRegions::is_empty(void) const
{
return (m_regions.empty());
}
/***********************************************************************//**
* @brief Reserves space for regions in container
*
* @param[in] num Number of regions
*
* Reserves space for @p num regions in the container.
***************************************************************************/
inline
void GSkyRegions::reserve(const int& num)
{
m_regions.reserve(num);
return;
}
/***********************************************************************//**
* @brief Return file name
*
* @return File name from which the regions have been loaded or into which
* the regions have been saved.
*
* Returns the file name from which the regions have been loaded or into
* which the regions have been saved. The returned string will be empty if
* no load() or save() method has been called before.
***************************************************************************/
inline
const std::string& GSkyRegions::filename(void) const
{
return (m_filename);
}
#endif /* GSKYREGIONS_HPP */