/usr/include/casacore/casa/Containers/ValueHolderRep.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 | //# ValueHolderRep.h: A holder object for the standard CASACORE data
//# Copyright (C) 2005
//# 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_VALUEHOLDERREP_H
#define CASA_VALUEHOLDERREP_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Utilities/DataType.h>
#include <iosfwd>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class AipsIO;
template<class T> class Array;
class Record;
class RecordFieldId;
// <summary>
// A holder for a value of any basic type.
// </summary>
// <use visibility=local>
// <reviewed reviewer="" date="" tests="tValueHolder">
// </reviewed>
// <synopsis>
// Class ValueHolderRep is the letter class for the envelope class ValueHolder.
// See <linkto class=ValueHolder>that class</linkto> for more information.
// </synopsis>
// <motivation>
// Copying ValueHolders should be as cheap as possible, so a counted
// referenced letter class is used.
// </motivation>
class ValueHolderRep
{
public:
// Create the object for the given value.
// <group>
explicit ValueHolderRep (Bool value);
explicit ValueHolderRep (uChar value);
explicit ValueHolderRep (Short value);
explicit ValueHolderRep (uShort value);
explicit ValueHolderRep (Int value);
explicit ValueHolderRep (uInt value);
explicit ValueHolderRep (Int64 value);
explicit ValueHolderRep (Float value);
explicit ValueHolderRep (Double value);
explicit ValueHolderRep (const Complex& value);
explicit ValueHolderRep (const DComplex& value);
explicit ValueHolderRep (const Char* value);
explicit ValueHolderRep (const String& value);
explicit ValueHolderRep (const Array<Bool>& value);
explicit ValueHolderRep (const Array<uChar>& value);
explicit ValueHolderRep (const Array<Short>& value);
explicit ValueHolderRep (const Array<uShort>& value);
explicit ValueHolderRep (const Array<Int>& value);
explicit ValueHolderRep (const Array<uInt>& value);
explicit ValueHolderRep (const Array<Int64>& value);
explicit ValueHolderRep (const Array<Float>& value);
explicit ValueHolderRep (const Array<Double>& value);
explicit ValueHolderRep (const Array<Complex>& value);
explicit ValueHolderRep (const Array<DComplex>& value);
explicit ValueHolderRep (const Array<String>& value);
explicit ValueHolderRep (const Record& value);
// </group>
// Create an empty N-dim array.
ValueHolderRep (uInt ndim, Bool dummy);
// Destructor.
~ValueHolderRep();
// Get the data type (as defined in DataType.h).
DataType dataType() const;
// Get the value.
// If possible, it converts the data as needed.
// <group>
Bool asBool () const;
uChar asuChar () const;
Short asShort () const;
uShort asuShort () const;
Int asInt () const;
uInt asuInt () const;
Int64 asInt64 () const;
Float asFloat () const;
Double asDouble () const;
Complex asComplex () const;
DComplex asDComplex() const;
const String& asString () const;
const Array<Bool> asArrayBool () const;
const Array<uChar> asArrayuChar () const;
const Array<Short> asArrayShort () const;
const Array<uShort> asArrayuShort () const;
const Array<Int> asArrayInt () const;
const Array<uInt> asArrayuInt () const;
const Array<Int64> asArrayInt64 () const;
const Array<Float> asArrayFloat () const;
const Array<Double> asArrayDouble () const;
const Array<Complex> asArrayComplex () const;
const Array<DComplex> asArrayDComplex() const;
const Array<String> asArrayString () const;
const Record& asRecord () const;
// </group>
// Put the value as a field in a record.
void toRecord (Record&, const RecordFieldId&) const;
// Construct the object from the value in a record.
static ValueHolderRep* fromRecord (const Record& rec, const RecordFieldId&);
// Write the ValueHolderRep to an output stream.
// Arrays are written as normal arrays using ArrayIO.h.
std::ostream& write (std::ostream& os) const;
// Compare two ValueHolder objects.
// They must have the same data type.
bool operator< (const ValueHolderRep& right) const;
/*
bool operator== (const ValueHolderRep& right) const;
bool near (const ValueHolderRep& right, tolerance=1e-5) const;
bool nearAbs (const ValueHolderRep& right, double tolerance=1e-5) const;
*/
private:
// Forbid copy ctor and assignment.
//# There is no fundamental reason to forbid them, but it saves
//# implementation work as long as they are not needed.
// <group>
ValueHolderRep (const ValueHolderRep&);
ValueHolderRep& operator= (const ValueHolderRep&);
// </group>
uInt itsNdim;
DataType itsType;
union {
Bool itsBool;
Int64 itsInt64;
Float itsFloat;
Double itsDouble;
void* itsPtr;
};
};
inline DataType ValueHolderRep::dataType() const
{
return itsType;
}
} //# NAMESPACE CASACORE - END
#endif
|