/usr/include/casacore/measures/Measures/MConvertBase.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 184 185 186 187 188 189 190 191 192 193 194 195 | //# MConvertBase.h: Conversion of Measures Base
//# Copyright (C) 1995,1996,1997,1999,2000,2001
//# 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 MEASURES_MCONVERTBASE_H
#define MEASURES_MCONVERTBASE_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/iosfwd.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class Unit;
class MeasValue;
class Measure;
class MRBase;
//# Typedefs
//# Constants
// <summary> Conversion of Measures Base</summary>
// <use visibility=local>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasure" demos="">
// </reviewed>
// <prerequisite>
// <li> <linkto class=Measure>Measure</linkto> class
// <li> <linkto class=MeasRef>MeasRef</linkto> class
// <li> <linkto class=Quantum>Quantum</linkto> class
// </prerequisite>
//
// <etymology>
// </etymology>
//
// <synopsis>
// MConvertBase can convert a Measure to the same type of Measure in a
// different reference frame. The MConvertBase is a templated class, but
// has typedefs for the allowed conversions, like <src>MEpoch::Convert.</src><br>
// The basic operation is to create a MConvertBase with either of:
// <ul>
// <li> MEpoch::Convert(MEpoch, MEpoch::Ref), where the
// <linkto class=MEpoch>MEpoch</linkto> is a template for subsequent
// conversions, i.e. it will remember the value and
// the input reference frame. And the
// <linkto class=MeasRef>MeasRef</linkto> is the output reference class.
// <li> MEpoch::Convert(MEpoch) with a subsequent setOut(MEpoch::Ref)
// <li> MEpoch::Convert(MEpoch::Ref in, MEpoch::Ref out) is a template for
// conversions from the input reference to the output reference. The
// 'template' model used is the default value for the Measure, with
// no units.
// <li> MEpoch::Convert(Unit, MEpoch::Ref in, MEpoch::Ref out) is a
// template for
// conversions from the input reference to the output reference. The
// 'template' model used is the default value for the Measure, with
// the default units as specified.
// <li> MEpoch::Convert() with a setModel(MEpoch) and setOut().
// </ul>
// An empty MeasRef indicates no conversion <br>.
// The constructor, and set functions, analyse the 'template' Measure and the
// output reference frame, and construct a pointer (in practice a list
// of pointers to bypass the necessity of creating too many conversion
// functions) to a conversion routine. Functionals will maybe used in
// a later version in stead of a vector of function pointers. During the
// implementation process, I have, for a variety of reasons, changed the
// list of function pointers to a list of numbers, with the Measure having
// just a <src>doConvert()</src> function containing an appropiate
// switch statement. <br>
// Actual conversions are done with the () operator, which produces a new
// MEpoch (or other Measure).<br>
// Possible arguments are (MVEpoch is used here generic, and indicates the
// internal format of a Measure; possibly, to make sure distinction between
// values with and without units is possible, even simple Measures will
// have their own internal class format, e.g. MVDouble. This will also aid
// in the possibility that I am still pursuing to have a fully dynamic
// conversion possibility. However, to be able to use pointers to functions
// in any reasonable way for all possible input and output types, a
// multi-level approach is necessary, with all possible datatypes derived
// from some MeasValue.):
// <ul>
// <li> (MEpoch, MEpoch::Ref): will create a new conversion method, and use
// it to produce the result of converting the MEpoch to the specified
// frame
// <li> (MEpoch): will create a new conversion method from the
// MEpoch to the MeasRef belonging to the MConvertBase
// <li> (Quantity): will use the conversion chain deduced from the
// MEpoch model in the definition of MConvertBase, and will convert the
// Quantity
// <li> (Quantum<Vector<Double> >) as previous
// <li> (Double): will use the units (if present) as specified in the
// MConvertBase object to construct the internal value
// to be converted
// <li> (Vector<Double> >): as previous
// </ul>
// Float versions will be produced if necessary.<br>
// The conversion analyser expects that all Measure classes have a set
// of routines to do the actual analysing and conversion.<br>
// If the standard conversion is not sufficient, additional methods can be
// added at the end of the list with the <src>addMethod()</src> member
// function, or at the beginning of the list with <src>insertMethod()</src>.
// The whole list can be cleared with <src>clearMethod()</src>.<br>
// To ease the specification of the Method, each Measure has a typedef
// (e.g. MEpoch_ConvType) specifying the Method type.
// </synopsis>
//
// <example>
// See <linkto class=Measure>Measure</linkto> for an example
// </example>
//
// <motivation>
// Conversion of Measures will in general be done on a series of values.
// Separating the analysis of the calculations necessary for the conversion
// from the actual conversion could speed up the process.
// </motivation>
//
// <todo asof="1996/02/22">
// </todo>
class MConvertBase {
public:
//# Friends
//# Constructors
//# Destructor
virtual ~MConvertBase();
//# Operators
//# General Member Functions
// Set a new model for the conversion
virtual void setModel(const Measure &val) = 0;
// Set a new model value only
virtual void set(const MeasValue &val) = 0;
// Set a new model unit only
virtual void set(const Unit &inunit) = 0;
// Add a method (Note: uInt should be an enum from the appropiate Measure)
virtual void addMethod(uInt method) = 0;
// Add a FrameTypes used (as specified in MeasFrame::FrameTypes)
virtual void addFrameType(uInt tp) = 0;
// Get number of methods
virtual Int nMethod() const = 0;
// Get method
virtual uInt getMethod(uInt which) const = 0;
// Print a conversion engine
virtual void print(ostream &os) const = 0;
private:
//# Data
//# Member functions
};
//# Global functions
// <summary> Global functions </summary>
// <group name=Output>
// Output decalration
ostream &operator<<( ostream &os, const MConvertBase &mc);
// </group>
} //# NAMESPACE CASACORE - END
#endif
|