/usr/include/casacore/casa/Quanta/UnitDim.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 | //# UnitDim.h: defines the (private) class describing basic SI dimensions
//# Copyright (C) 1994,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 CASA_UNITDIM_H
#define CASA_UNITDIM_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/iosfwd.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class String;
class UnitVal;
class UnitMap;
//
// <summary>
// describes a unit in basic SI unit dimensions
// </summary>
// <use visibility=local>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tUnit">
//
// <prerequisite>
// You should have at least a preliminary understanding of these classes:
// <li> <linkto class=Unit>Unit</linkto>
// </prerequisite>
//
// <etymology>
// Based on Unit and the Dimension of a unit in SI defining units
// </etymology>
//
// <synopsis>
// Physical units are strings consisting of one or more names of known
// basic units, separated by '.' or ' ' (for multiplication) or '/' (for
// division). Each name can optionally be preceded by a standard decimal
// prefix, and/or followed by an (optionally signed) exponent.
// Example:
// km/s/(Mpc.s)2 is identical to km.s-1.Mpc-2.s-2
//
// See the <linkto class=Unit>Unit</linkto> for more details.
//
// The UnitDim class is a private class for use by the Unit classes. It
// contains the dimensions in the 9 basic defining SI units of a unit.
// </synopsis>
//
// <example>
// </example>
//
// <motivation>
// The UnitDim class has been separated to keep the interface between a
// complex unit description string and the basic SI units clean.
// </motivation>
//
// <todo asof="941110">
// <li> Some inlining (did not work first go)
// </todo>
class UnitDim {
//# Friends
friend class UnitVal;
friend class UnitMap;
// Output the SI dimensions (e.g. 'km/s/g' as 'm kg-1 s-1')
friend ostream& operator<<(ostream &os, const UnitDim &du);
public:
//# Enumerations
// Enumeration of the order and number of the defining SI units.
// If order or contents changed, change also in dimName() and dimFull().
enum Dim {Dm=0, Dkg, Ds, DA, DK, Dcd, Dmol, Drad, Dsr, Dnon, Dnumber};
// Constants
// Number of Longs to cater for 9 bytes.
#define UNITDIM_DLNUMBER 3
// Destructor
~UnitDim();
protected:
void init( );
void init(Int pos);
private:
//# Constructors
// Construct a unit with zero dimension in all SI units
UnitDim() { init( ); }
// Copy constructor
UnitDim(const UnitDim &other);
// Construct a unit dimension with a one in the indicated position (as
// Dim enumerator) and zeroes in all other units
UnitDim(Int pos) { init(pos); }
//# Operators
// Assignment (copy semantics)
UnitDim &operator=(const UnitDim &other);
// Operators to combine unit dimensions
// <group name="combine">
// Multiplication adds the unit dimensions of all SI units
UnitDim &operator*=(const UnitDim &other);
UnitDim operator*(const UnitDim &other) const;
// Division subtracts the unit dimensions of all SI units
UnitDim &operator/=(const UnitDim &other);
UnitDim operator/(const UnitDim &other) const;
// </group>
// Compare dimension of units
// <group name="compare">
// Compare for equal dimensions
Bool operator==(const UnitDim &other) const;
// Compare for unequal dimensions
Bool operator!=(const UnitDim &other) const;
// </group>
//# General Member Functions
// Raise all SI defining units to an integer power
UnitDim pow(Int p);
// Get the tag for specified dimension
static const String& dimName(uInt which);
// Get the full name for the specified dimension
static const String& dimFull(uInt which);
//# Data Members
// 1-byte vector to contain the dimensions of the defining SI units
// (using same storage as Long vector for speed reasons)
Long unitLong[UNITDIM_DLNUMBER];
Char *unitDim;
};
//# Inline Implementations
//# Global definitions
// Output
ostream& operator<<(ostream &os, const UnitDim &du);
} //# NAMESPACE CASACORE - END
#endif
|