This file is indexed.

/usr/include/casacore/fits/FITS/FITSHistoryUtil.h is in casacore-dev 2.2.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
//# FITSHistoryUtil.h: Class of static functions to help with FITS History cards.
//# Copyright (C) 2002
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library 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 Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//#        Internet email: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#
//#
//# $Id$


#ifndef FITS_FITSHISTORYUTIL_H
#define FITS_FITSHISTORYUTIL_H

#include <casacore/casa/aips.h>
#include <vector>



namespace casacore { //# NAMESPACE CASACORE - BEGIN

class ConstFitsKeywordList;
class FitsKeywordList;
class String;
template<class T> class Vector;
class LoggerHolder;

// <summary>
// A class with static functions to help deal with FITS History cards.
// </summary>

// <use visibility=export>

// <reviewed reviewer="Eric Sessoms" date="2002/08/19" tests="tFITSHistoryUtil.cc">
// </reviewed>

// <prerequisite>
//   <li> General knowledge of FITS, and particularly FITS keywords, is
//        assumed.
//   <li> Presumably you are using this class in conjunction
//        with the "native" 
//        <linkto class=FitsKeywordList>FitsKeywordList</linkto>
// </prerequisite>
//
// <etymology>
// This is a collection of static utility functions for use with FITS
// HISTORY keywords.
// </etymology>
//
// <synopsis>
// Manipulate HISTORY information. FITS HISTORY cards are interconverted with
// String as follows:
// <ul>
// <li> 'HISTORY ' and trailing blanks are removed from each card.
// <li> Continuation cards are CARDS that have '>' in the first line.
// <li> A string is made by concatenating the leading card and all continuation
//    cards.
// </ul>
// For example:
// <srcblock>
// HISTORY Every good
// HISTORY > boy deserves
// HISTORY >fudge.
// </srcblock>
// Becomes the C++ String: "Every good boy deservesfudge." Note the lack of
// a space between deserves and fudge.
//
// History cards are broken into groups. A group is delimited by
// <srcblock>
// HISTORY AIPS++ START TYPE
// HISTORY AIPS++ END [TYPE]
// </srcblock>
// Where type might be, e.g., LOGTABLE. HISTORY cards not enclosed between
// START/END pairs are implicitly of type "" (i.e. the empty string).
// The TYPE is optional on the END statement. It is essentially a comment.
//
// At present, START/END pairs cannot be nested, although this would be an
// obvious extension.
// </synopsis>
//
// <motivation>
// The FitsKeywordList class can be somewhat tedious to use, as it deals with,
// e.g., char* pointers rather than Strings. This class makes it easy to
// interconvert between the HISTORY keywords and a Vector of related history
// information.
// </motivation>
//

class FITSHistoryUtil
{
public:
    // Get the strings in the next keyword group. Returns the number of
    // strings found (0 when no history remains).  If necessary, strings will be
    // resized larger. in must be set to the first card before the first call to
    // getHistoryGroup, and should not be reset until all history is extracted
    // (otherwise the same history will be extracted more than once). This method
    // can be used as follows:
    // <srcBlock>
    // uInt n;
    // Vector<String> group;
    // String type;
    // ConstFITSKeywordList keys(...);
    // ...
    // keys.first();
    // while ((n = FITSHistoryUtil::getHistoryGroup(group, type, keys)) != 0) {
    //     ... process this history group
    // }
    // </srcBlock>
    // strings will have no embedded newlines. strings is not resized if it is more 
    // than large enough to hold the number of history cards in the group (i.e. there
    // may be values at the end of strings which are not part of the requested group.
    static uInt getHistoryGroup(Vector<String> &strings, String &groupType,
				ConstFitsKeywordList &in);

    // Add history strings of the specified groupType to an existing FitsKeywordList.
    // This function will split long strings across HISTORY cards and set
    // up the group START/END keywords if necessary. nstrings must be specified
    // because strings might have come from something like getHistoryGroup, i.e.
    // it might have garbage entries at the end. The strings may have embedded
    // newlines, but they must have no other non-printable characters.
    static void addHistoryGroup(FitsKeywordList &out,
				const std::vector<String> &strings,
				uInt nstrings, const String &groupType);

    // Some functions to help convert between log tables and FITS HISTORY cards.
    // It is intended that these functions will only be used by the functions in
    // classes like ImageFITSConverter.
    // 
    // Table rows are in Casacore format if they have a valid time and priority,
    // otherwise they are in the standard FITS HISTORY format. The history lines
    // are processed by contiguous groups where all lines in that group are
    // either in Casacore or HISTORY format. Note that history.nelements() might
    // be greater than nstrings for efficiency (i.e.  the history vector will
    // not be shrunk unnecessarily).
    //
    // Note that these functions are in a separate .cc file so that if they
    // are not used the table function is not linked in if other functions in
    // this class are used.
    //
    // The strings are assumed to be from or going to the get/addHistoryGroup
    // functions, i.e. strings that span multiple lines are joined, 
    // AIPS++ START/END cards are stripped, etc.
    //
    // The Casacore format is: the first line DATE PRIORITY [SRCCODE='xxx']
    // [OBJID='xxx'] and the second lins is the message.  These entries are in
    // an AIPS++ START LOGTABLE history sequence.
    // <group>
    static void fromHISTORY(LoggerHolder& logSink, 
			    const Vector<String>& history, 
			    uInt nstrings, Bool aipsppFormat);

    // toHistory signals that it is done by setting nstrings to 0.
    // The returned value is firstLine + n_lines_read, i.e. use
    // it as firstLine in your next call.
    static uInt toHISTORY(std::vector<String>& history, Bool& aipsppFormat,
			  uInt& nstrings, uInt firstLine, 
			  const LoggerHolder& logSink);
    // </group>

};


} //# NAMESPACE CASACORE - END

#endif