27#ifndef CASA_RECORDDESC_H
28#define CASA_RECORDDESC_H
32#include <casacore/casa/aips.h>
33#include <casacore/casa/Containers/RecordDescRep.h>
34#include <casacore/casa/Containers/RecordInterface.h>
35#include <casacore/casa/Utilities/COWPtr.h>
36#include <casacore/casa/iosfwd.h>
197 DataType
type (
Int whichField)
const;
281 Bool& equalDataTypes)
const;
291 ostream&
put (ostream& os)
const;
307: desc_p (other.desc_p)
312 if (
this != &other) {
323 return desc_p.rwRef().addField (fieldName, dataType);
327 DataType scalarOrArrayType,
330 return desc_p.rwRef().addArray (fieldName, scalarOrArrayType,
shape);
336 return desc_p.rwRef().addRecord (fieldName, subDesc);
340 const String& tableDescName)
347 return desc_p.ref().comment (whichField);
361 Int whichFieldFromOther,
364 return desc_p.rwRef().mergeField (other.
desc_p.ref(), whichFieldFromOther,
371 return desc_p.rwRef().merge (other.
desc_p.ref(), duplicateAction);
376 return desc_p.rwRef().removeField (whichField);
381 desc_p.rwRef().renameField (newName, whichField);
386 return desc_p.ref().fieldNumber (fieldName);
391 return desc_p.ref().nfields();
396 return desc_p.ref().type (whichField);
406 return desc_p.ref().makeName (whichField);
411 return desc_p.ref().name (whichField);
416 return desc_p.ref().isArray (whichField);
421 return desc_p.ref().isScalar (whichField);
426 return desc_p.ref().isSubRecord (whichField);
431 return desc_p.ref().isTable (whichField);
436 return desc_p.ref().shape (whichField);
441 return desc_p.ref().tableDescName (whichField);
469 Bool& equalDataTypes)
const
471 return desc_p.ref().isEqual (other.
desc_p.ref(), equalDataTypes);
474 Bool& equalDataTypes)
const
476 return desc_p.ref().isSubset (other.
desc_p.ref(), equalDataTypes);
479 Bool& equalDataTypes)
const
481 return desc_p.ref().isStrictSubset (other.
desc_p.ref(), equalDataTypes);
484 Bool& equalDataTypes)
const
486 return other.
desc_p.ref().isSubset (
desc_p.ref(), equalDataTypes);
489 Bool& equalDataTypes)
const
491 return other.
desc_p.ref().isStrictSubset (
desc_p.ref(), equalDataTypes);
501 return desc.
put (os);
505 return desc.
put (os);
509 return desc.
get (os);
Bool isSubRecord(Int whichField) const
Returns True if whichField is a sub-record.
RecordDesc & rwSubRecord(Int whichField)
Bool isStrictSubset(const RecordDesc &other, Bool &equalDataTypes) const
Test if this description is a strict subset of another one, thus if it is a subset and not equal.
COWPtr< RecordDescRep > desc_p
Use a copy-on-write pointer to the RecordDescRep.
Int fieldNumber(const String &fieldName) const
Returns the index of the field named fieldName.
uInt nfields() const
Number of fields in the description.
uInt merge(const RecordDesc &other, RecordInterface::DuplicatesFlag DuplicateAction=RecordInterface::ThrowOnDuplicates)
Add all the fields from another RecordDesc to the current objects.
void renameField(const String &newName, Int whichField)
Rename the given field.
uInt removeField(Int whichField)
Remove the given field from the description.
RecordDesc()
Create a description with no fields.
String makeName(Int whichField) const
Create a name for a field defined by index as *i (similar to glish).
Bool isEqual(const RecordDesc &other, Bool &equalDataTypes) const
Test if this description equals another one.
Bool isSubset(const RecordDesc &other, Bool &equalDataTypes) const
Test if this description is a subset of another one.
const String & comment(Int whichField) const
Get the comment for this field.
Bool conform(const RecordDesc &other) const
Test if this description conforms the other.
uInt mergeField(const RecordDesc &other, Int whichFieldFromOther, RecordInterface::DuplicatesFlag DuplicateAction=RecordInterface::ThrowOnDuplicates)
Merge a single field from other.
const String & name(Int whichField) const
What is the name of the given field.
const RecordDesc & subRecord(Int whichField) const
If whichField is a sub-record return its description.
Bool isDisjoint(const RecordDesc &other) const
Test if the set of field names in this and other record description is disjoint (i....
void setComment(Int whichField, const String &comment)
Set the comment for this field.
friend AipsIO & operator>>(AipsIO &os, RecordDesc &desc)
String uniqueName(const String &name) const
Make the given name unique by adding a suffix _j when needed.
Bool operator!=(const RecordDesc &other) const
friend ostream & operator<<(ostream &os, const RecordDesc &desc)
Writes/reads the RecordDesc to/from an output stream.
void setShape(Int whichField, const IPosition &shape)
Set the shape for this field.
Bool isTable(Int whichField) const
Returns True if whichField is a table.
Bool isSuperset(const RecordDesc &other, Bool &equalDataTypes) const
Test if this description is a superset of another one.
Bool operator==(const RecordDesc &other) const
This and other compare equal if the field types and shapes are identical (recursively if there are de...
DataType type(Int whichField) const
What is the type of the given field.
Bool isStrictSuperset(const RecordDesc &other, Bool &equalDataTypes) const
Test if this description is a strict superset of another one, thus if it is a superset and not equal.
Bool isArray(Int whichField) const
Returns True if whichField is an array.
RecordDesc & operator=(const RecordDesc &other)
Replace this description with other.
ostream & put(ostream &os) const
Writes/reads the RecordDesc to/from an output stream.
uInt addTable(const String &fieldName, const String &tableDescName)
Add a Table field to the description.
AipsIO & put(AipsIO &os) const
Bool isScalar(Int whichField) const
Returns True if whichField is a scalar.
const String & tableDescName(Int whichField) const
What is the name of the table description.
uInt addField(const String &fieldName, DataType dataType)
Add scalar, array, sub-record, or table field.
const IPosition & shape(Int whichField) const
What is the shape of the given field.
DuplicatesFlag
Define the Duplicates flag for the function merge in the various record classes.
@ ThrowOnDuplicates
Throw an exception.
String: the storage and methods of handling collections of characters.
this file contains all the compiler specific defines
AipsIO & operator>>(AipsIO &os, Record &rec)
ostream & operator<<(ostream &os, const IComplex &)
Show on ostream.
TableExprNode shape(const TableExprNode &array)
Function operating on any scalar or array resulting in a Double array containing the shape.
bool Bool
Define the standard types used by Casacore.