casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends
casa::RecordInterface Class Reference

Abstract base class for Record classes. More...

#include <RecordInterface.h>

Inheritance diagram for casa::RecordInterface:
casa::NoticeSource casa::Record casa::TableRecord casa::FlagReport casa::QtXmlRecord

List of all members.

Public Types

enum  RecordType {
  Fixed,
  Variable
}
 Define the flag telling if a Record has a fixed or variable structure. More...
enum  DuplicatesFlag {
  RenameDuplicates,
  SkipDuplicates,
  OverwriteDuplicates,
  ThrowOnDuplicates
}
 Define the Duplicates flag for the function merge in the various record classes. More...
typedef Bool CheckFieldFunction (const String &fieldName, DataType dataType, const void *extraArgument, String &message)
 Define the signature of the add callback function.

Public Member Functions

 RecordInterface ()
 The default constructor creates an empty record with a variable structure.
 RecordInterface (RecordType type, CheckFieldFunction *funcPtr, const void *checkArgument)
 Create a record with no fields.
 RecordInterface (const RecordInterface &other)
 Copy constructor (copy semantics).
RecordInterfaceoperator= (const RecordInterface &other)
 Assignment (copy semantics).
 ~RecordInterface ()
 Destruct the record.
virtual RecordInterfaceclone () const =0
 Make a copy of this object.
virtual void assign (const RecordInterface &that)=0
 Assign that RecordInterface object to this one.
Bool isFixed () const
 Is the Record structure fixed (i.e.
virtual uInt nfields () const =0
 How many fields does this structure have?
uInt size () const
bool empty () const
 Is the record empty?
virtual Int fieldNumber (const String &fieldName) const =0
 Get the field number from the field name.
Int idToNumber (const RecordFieldId &) const
 Get the field number for the given field id.
Bool isDefined (const String &fieldName) const
 Test if a field name exists.
virtual DataType type (Int whichField) const =0
 Get the data type of this field (as defined in DataType.h).
DataType dataType (const RecordFieldId &) const
String name (const RecordFieldId &) const
 Get the name of this field.
virtual const Stringcomment (const RecordFieldId &) const =0
 Get the comment for this field.
virtual void setComment (const RecordFieldId &, const String &comment)=0
 Set the comment for this field.
IPosition shape (const RecordFieldId &) const
 Get the actual shape of this field.
RecordDesc description () const
 Get the description of this record.
virtual void restructure (const RecordDesc &newDescription, Bool recursive=True)=0
 Change the structure of this Record to contain the fields in newDescription.
virtual void removeField (const RecordFieldId &)=0
 Remove a field from the record.
void define (const RecordFieldId &, Bool value)
 Define a value for the given field.
void define (const RecordFieldId &, uChar value)
void define (const RecordFieldId &, Short value)
void define (const RecordFieldId &, Int value)
void define (const RecordFieldId &, uInt value)
void define (const RecordFieldId &, Int64 value)
void define (const RecordFieldId &, Float value)
void define (const RecordFieldId &, Double value)
void define (const RecordFieldId &, const Complex &value)
void define (const RecordFieldId &, const DComplex &value)
void define (const RecordFieldId &, const Char *value)
void define (const RecordFieldId &, const String &value)
void define (const RecordFieldId &, const Array< Bool > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< uChar > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Short > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Int > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< uInt > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Int64 > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Float > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Double > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< Complex > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< DComplex > &value, Bool FixedShape=False)
void define (const RecordFieldId &, const Array< String > &value, Bool FixedShape=False)
virtual void defineRecord (const RecordFieldId &, const RecordInterface &value, RecordType=Variable)=0
void get (const RecordFieldId &, Bool &value) const
 Get the value of the given field.
void get (const RecordFieldId &, uChar &value) const
void get (const RecordFieldId &, Short &value) const
void get (const RecordFieldId &, Int &value) const
void get (const RecordFieldId &, uInt &value) const
void get (const RecordFieldId &, Int64 &value) const
void get (const RecordFieldId &, Float &value) const
void get (const RecordFieldId &, Double &value) const
void get (const RecordFieldId &, Complex &value) const
void get (const RecordFieldId &, DComplex &value) const
void get (const RecordFieldId &, String &value) const
void get (const RecordFieldId &, Array< Bool > &value) const
void get (const RecordFieldId &, Array< uChar > &value) const
void get (const RecordFieldId &, Array< Short > &value) const
void get (const RecordFieldId &, Array< Int > &value) const
void get (const RecordFieldId &, Array< uInt > &value) const
void get (const RecordFieldId &, Array< Int64 > &value) const
void get (const RecordFieldId &, Array< Float > &value) const
void get (const RecordFieldId &, Array< Double > &value) const
void get (const RecordFieldId &, Array< Complex > &value) const
void get (const RecordFieldId &, Array< DComplex > &value) const
void get (const RecordFieldId &, Array< String > &value) const
Bool asBool (const RecordFieldId &) const
 The following functions get the value based on field name or number.
uChar asuChar (const RecordFieldId &) const
Short asShort (const RecordFieldId &) const
Int asInt (const RecordFieldId &) const
uInt asuInt (const RecordFieldId &) const
Int64 asInt64 (const RecordFieldId &) const
Float asFloat (const RecordFieldId &) const
Double asDouble (const RecordFieldId &) const
Complex asComplex (const RecordFieldId &) const
DComplex asDComplex (const RecordFieldId &) const
const StringasString (const RecordFieldId &) const
const Array< Bool > & asArrayBool (const RecordFieldId &) const
const Array< uChar > & asArrayuChar (const RecordFieldId &) const
const Array< Short > & asArrayShort (const RecordFieldId &) const
const Array< Int > & asArrayInt (const RecordFieldId &) const
const Array< uInt > & asArrayuInt (const RecordFieldId &) const
const Array< Int64 > & asArrayInt64 (const RecordFieldId &) const
const Array< Float > & asArrayFloat (const RecordFieldId &) const
const Array< Double > & asArrayDouble (const RecordFieldId &) const
const Array< Complex > & asArrayComplex (const RecordFieldId &) const
const Array< DComplex > & asArrayDComplex (const RecordFieldId &) const
const Array< String > & asArrayString (const RecordFieldId &) const
virtual const RecordInterfaceasRecord (const RecordFieldId &) const =0
virtual RecordInterfaceasrwRecord (const RecordFieldId &)=0
Array< BooltoArrayBool (const RecordFieldId &) const
 Get an array while promoting the data as needed.
Array< uChartoArrayuChar (const RecordFieldId &) const
Array< ShorttoArrayShort (const RecordFieldId &) const
Array< InttoArrayInt (const RecordFieldId &) const
Array< uInttoArrayuInt (const RecordFieldId &) const
Array< Int64toArrayInt64 (const RecordFieldId &) const
Array< FloattoArrayFloat (const RecordFieldId &) const
Array< DoubletoArrayDouble (const RecordFieldId &) const
Array< Complex > toArrayComplex (const RecordFieldId &) const
Array< DComplex > toArrayDComplex (const RecordFieldId &) const
Array< StringtoArrayString (const RecordFieldId &) const
void toArray (const RecordFieldId &id, Array< Bool > &array) const
void toArray (const RecordFieldId &id, Array< uChar > &array) const
void toArray (const RecordFieldId &id, Array< Short > &array) const
void toArray (const RecordFieldId &id, Array< Int > &array) const
void toArray (const RecordFieldId &id, Array< uInt > &array) const
void toArray (const RecordFieldId &id, Array< Int64 > &array) const
void toArray (const RecordFieldId &id, Array< Float > &array) const
void toArray (const RecordFieldId &id, Array< Double > &array) const
void toArray (const RecordFieldId &id, Array< Complex > &array) const
void toArray (const RecordFieldId &id, Array< DComplex > &array) const
void toArray (const RecordFieldId &id, Array< String > &array) const
Float asfloat (const RecordFieldId &) const
 Get value based on field name or number.
Double asdouble (const RecordFieldId &) const
const Array< Float > & asArrayfloat (const RecordFieldId &) const
const Array< Double > & asArraydouble (const RecordFieldId &) const
virtual void makeUnique ()=0
 Make a unique record representation (for copy-on-write in RecordFieldPtr).
virtual void defineDataField (Int whichField, DataType type, const void *value)=0
 Define a data field (for RecordFieldPtr).
virtual void * get_pointer (Int whichField, DataType type) const =0
 Used by the RecordFieldPtr classes to attach to the correct field.
virtual void * get_pointer (Int whichField, DataType type, const String &recordType) const =0
virtual void print (std::ostream &, Int maxNrValues=25, const String &indent="") const =0

Protected Member Functions

virtual void addDataField (const String &name, DataType type, const IPosition &shape, Bool fixedShape, const void *value)=0
 
      

void throwIfFixed () const
 Check if the Record has a non-fixed structure.
void checkName (const String &fieldName, DataType type) const
 Check if the new field name is correct.
RecordTyperecordType ()
 Give access to the RecordType flag (write-access is needed when a record is read back).
RecordType recordType () const
Int newIdToNumber (const RecordFieldId &) const
 Get the field number for the given field id.
void defineField (const RecordFieldId &, DataType type, const void *value)
 Add a scalar field with the given type and value.
void defineField (const RecordFieldId &, DataType type, const IPosition &shape, Bool fixedShape, const void *value)
 Add an array field with the given type, shape and value.

Private Member Functions

virtual RecordDesc getDescription () const =0
 Get the description of this record.

Private Attributes

CheckFieldFunctioncheckFunction_p
 Holds the callback function plus argument.
const void * checkArgument_p
RecordType type_p
 Defines if the Record has a fixed structure.

Friends

std::ostream & operator<< (std::ostream &os, const RecordInterface &rec)
 Print the contents of the record.

Detailed Description

Abstract base class for Record classes.

Intended use:

Public interface

Review Status

Reviewed By:
Mark Wieringa
Date Reviewed:
1996/04/15
Test programs:
tRecord

Etymology

``Record'' is a widely used term in both programming languages and data structures to denote an imhogeneous set of fields. An alternative would have been to name it structure, which would have perhaps been a clearer name for C++ programmers.
RecordInterface denotes that this class defines the common interface to possible Record classes.

Synopsis

A Record is an inhomogeneous, hierarchical, collection of named fields. The fields may be of scalar type, array type, a Table or a Record. This latter feature is what makes the Record a (potentially) hierarchical type.

RecordInterface is the abstract base class for various Record classes. At the moment three Record classes exist:

Presently, the scalar types are chosen to be compatible with the native types of the Table system, viz: Bool, uChar, Short, Int, uInt, Int64, Float, Double, Complex, DComplex, String. Arrays of all these types are also available. It is fairly straightforward to extend this set if necessary, although it will result in more template instantiations with the current implementation.

Each field has an integral index, which ranges between 0 and nfields() - 1. The values of a field can be manipulated in two ways:

  1. Through the get and put functions in this class. They are easy to use and support type promotion. However, they are a bit less efficient than the second way.
  2. Through the class RecordFieldPtr . This is a bit less convenient. However, it is more efficient if the same field is accessed multiple times.

The structure of a record can be fixed or variable. If fixed, it is not possible to change the structure once the record has been instantiated. If variable, the record can be restructured or fields can be added/removed.
When a field gets added, it is possible to check if its name and type are valid by means of the CheckFunction callback. This is for instance used by the table system to assure that keywords and columns in a table do not have the same name.

Arrays in a record description can be fixed or variable shaped. If fixed shaped, only arrays with that shape can be stored in that field in the record. If variable shaped, any array can be stored.
However, note there is a difference between assign and define. Assign invokes the array assignment operator which checks for conformance. Thus even for variable shaped arrays, the new array must conform the exisitng one when using assign. Define simply replaces the array, thus for variable shaped arrays ay array shape will do.

RecordFieldPtr objects attached to a Record have to be notified when the Record is deleted or changed. The RecordInterface class provides the hooks for this via the Notice system. It is derived from NoticeSource . The class RecordNotice is for the messages.

Motivation

This common base class provides a common interface to the various Record classes. Furthermore it is needed for the class RecordFieldPtr. Finally it provides the hooks for the notification in case the record structure changes.

To Do

Definition at line 143 of file RecordInterface.h.


Member Typedef Documentation

typedef Bool casa::RecordInterface::CheckFieldFunction(const String &fieldName, DataType dataType, const void *extraArgument, String &message)

Define the signature of the add callback function.

This function is called when a field is added to the record (thus also when a Record is constructed from a RecordDesc). The function can check if the name and/or data type are valid. The extra argument is the argument given to the Record constructor which can be used to pass non-Record information. The function should return False if name or data type is invalid. In that case it can fill the message string, which will be added to the message in the thrown exception.

Definition at line 182 of file RecordInterface.h.


Member Enumeration Documentation

Define the Duplicates flag for the function merge in the various record classes.

This function merges the fields from that record (description) into this one. DuplicatesFlag determines what to do if a field already exists.

Enumerator:
RenameDuplicates 

Rename a name from the other set to name_n, where n is the first positive number making the name unique.

SkipDuplicates 

Skip duplicate names from the other set.

OverwriteDuplicates 

Overwrite the value of a duplicate keyword This will also happen if their types differ.

ThrowOnDuplicates 

Throw an exception.

Definition at line 161 of file RecordInterface.h.

Define the flag telling if a Record has a fixed or variable structure.

Enumerator:
Fixed 

Record has a fixed structure; that is, no fields can be added or removed once the Record is created.

Variable 

Record has a variable structure; after Record creation fields can be added or removed at will.

Definition at line 148 of file RecordInterface.h.


Constructor & Destructor Documentation

The default constructor creates an empty record with a variable structure.

casa::RecordInterface::RecordInterface ( RecordType  type,
CheckFieldFunction funcPtr,
const void *  checkArgument 
)

Create a record with no fields.

The callback function is called when a field is added to the Record. That function can check the name and of data type of the new field (for instance, the Table system uses it to ensure that table columns and keywords have different names).

Copy constructor (copy semantics).

Destruct the record.

All attached RecordFieldPtr objects are notified to detach themselves.


Member Function Documentation

virtual void casa::RecordInterface::addDataField ( const String name,
DataType  type,
const IPosition shape,
Bool  fixedShape,
const void *  value 
) [protected, pure virtual]

      

Let the derived class add an array field with the given type, shape, and value.

Implemented in casa::TableRecord, and casa::Record.

const Array<Complex>& casa::RecordInterface::asArrayComplex ( const RecordFieldId ) const
const Array<DComplex>& casa::RecordInterface::asArrayDComplex ( const RecordFieldId ) const
const Array< Double > & casa::RecordInterface::asArraydouble ( const RecordFieldId id) const [inline]

Definition at line 580 of file RecordInterface.h.

const Array< Float > & casa::RecordInterface::asArrayfloat ( const RecordFieldId id) const [inline]

Definition at line 575 of file RecordInterface.h.

The following functions get the value based on field name or number.

The scalar functions promote the data type if needed. It also supports conversion of Int to Bool.
The array functions throw an exception if the data type mismatches. The toArrayX function can be used for array type promotion.

Referenced by casa::isFieldSet().

Complex casa::RecordInterface::asComplex ( const RecordFieldId ) const
DComplex casa::RecordInterface::asDComplex ( const RecordFieldId ) const

Referenced by asdouble().

Double casa::RecordInterface::asdouble ( const RecordFieldId id) const [inline]

Definition at line 570 of file RecordInterface.h.

References asDouble().

Referenced by asfloat().

Float casa::RecordInterface::asfloat ( const RecordFieldId id) const [inline]

Get value based on field name or number.

They are here for backward compatibility with the old KeywordSet classes and will be removed in the future.

Definition at line 566 of file RecordInterface.h.

References asFloat().

virtual const RecordInterface& casa::RecordInterface::asRecord ( const RecordFieldId ) const [pure virtual]

Implemented in casa::TableRecord, and casa::Record.

Referenced by casa::isValidRecord().

virtual RecordInterface& casa::RecordInterface::asrwRecord ( const RecordFieldId ) [pure virtual]

Implemented in casa::TableRecord, and casa::Record.

virtual void casa::RecordInterface::assign ( const RecordInterface that) [pure virtual]

Assign that RecordInterface object to this one.

Unlike operator= it copies all data in the derived class.

Implemented in casa::TableRecord, and casa::Record.

void casa::RecordInterface::checkName ( const String fieldName,
DataType  type 
) const [protected]

Check if the new field name is correct.

This is done by calling the checkFunction (if defined). If incorrect, an exception is thrown.

virtual RecordInterface* casa::RecordInterface::clone ( ) const [pure virtual]

Make a copy of this object.

Implemented in casa::TableRecord, and casa::Record.

virtual const String& casa::RecordInterface::comment ( const RecordFieldId ) const [pure virtual]

Get the comment for this field.

Implemented in casa::TableRecord, and casa::Record.

DataType casa::RecordInterface::dataType ( const RecordFieldId id) const [inline]

Definition at line 558 of file RecordInterface.h.

References idToNumber(), and type().

Referenced by casa::fieldType(), casa::isField(), casa::isFieldSet(), and casa::isValidRecord().

void casa::RecordInterface::define ( const RecordFieldId ,
Bool  value 
)

Define a value for the given field.

Array conformance rules will not be applied for variable shaped arrays. If the field and value data type mismatch, type promotion of scalars will be done if possible. If not possible, an exception is thrown.
If the field does not exist, it will be added to the record. This results in an exception for fixed structured records. The field is checked by a possible field checking function before it gets added.

Referenced by define(), casa::RSEllipse::getShapeSpecificProperties(), casa::RSCircle::getShapeSpecificProperties(), casa::RSRectangle::getShapeSpecificProperties(), casa::FunctionMarshallable::loadFuncType(), casa::HDF5Record::readArr(), and casa::HDF5Record::readSca().

void casa::RecordInterface::define ( const RecordFieldId ,
uChar  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
Short  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
Int  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
uInt  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
Int64  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
Float  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
Double  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Complex &  value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const DComplex &  value 
)
void casa::RecordInterface::define ( const RecordFieldId id,
const Char value 
) [inline]

Definition at line 562 of file RecordInterface.h.

References define(), and String.

void casa::RecordInterface::define ( const RecordFieldId ,
const String value 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Bool > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< uChar > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Short > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Int > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< uInt > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Int64 > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Float > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Double > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< Complex > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< DComplex > &  value,
Bool  FixedShape = False 
)
void casa::RecordInterface::define ( const RecordFieldId ,
const Array< String > &  value,
Bool  FixedShape = False 
)
virtual void casa::RecordInterface::defineDataField ( Int  whichField,
DataType  type,
const void *  value 
) [pure virtual]

Define a data field (for RecordFieldPtr).

Implemented in casa::TableRecord, and casa::Record.

Referenced by casa::defineRecordFieldPtr().

void casa::RecordInterface::defineField ( const RecordFieldId ,
DataType  type,
const void *  value 
) [protected]

Add a scalar field with the given type and value.

An exception is thrown if the record structure is fixed or if the name is invalid.

void casa::RecordInterface::defineField ( const RecordFieldId ,
DataType  type,
const IPosition shape,
Bool  fixedShape,
const void *  value 
) [protected]

Add an array field with the given type, shape and value.

An exception is thrown if the record structure is fixed or if the name is invalid.

virtual void casa::RecordInterface::defineRecord ( const RecordFieldId ,
const RecordInterface value,
RecordType  = Variable 
) [pure virtual]

Implemented in casa::TableRecord, and casa::Record.

Get the description of this record.

Reimplemented in casa::TableRecord, and casa::Record.

Referenced by casa::RecordExpr_global_functions_RecordExpr::makeRecordExpr().

bool casa::RecordInterface::empty ( ) const [inline]

Is the record empty?

Definition at line 232 of file RecordInterface.h.

References size().

virtual Int casa::RecordInterface::fieldNumber ( const String fieldName) const [pure virtual]

Get the field number from the field name.

-1 is returned if the field name is unknown.

Implemented in casa::TableRecord, and casa::Record.

Referenced by isDefined().

void casa::RecordInterface::get ( const RecordFieldId ,
Bool value 
) const

Get the value of the given field.

If the field and value data type mismatch, type promotion of scalars will be done if possible. If not possible, an exception is thrown. If the value argument is an array, it will be reshaped if needed.

Referenced by casa::ColumnsIndex::copyKeyField(), casa::HDF5Record::writeArr(), and casa::HDF5Record::writeSca().

void casa::RecordInterface::get ( const RecordFieldId ,
uChar value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Short value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Int value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
uInt value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Int64 value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Float value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Double value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Complex &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
DComplex &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
String value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Bool > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< uChar > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Short > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Int > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< uInt > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Int64 > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Float > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Double > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< Complex > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< DComplex > &  value 
) const
void casa::RecordInterface::get ( const RecordFieldId ,
Array< String > &  value 
) const
virtual void* casa::RecordInterface::get_pointer ( Int  whichField,
DataType  type 
) const [pure virtual]

Used by the RecordFieldPtr classes to attach to the correct field.

The latter function is used to attach to a Record-type field checking if the correct Record type is used.

Implemented in casa::TableRecord, and casa::Record.

Referenced by casa::attachRecordFieldPtr().

virtual void* casa::RecordInterface::get_pointer ( Int  whichField,
DataType  type,
const String recordType 
) const [pure virtual]

Implemented in casa::TableRecord, and casa::Record.

virtual RecordDesc casa::RecordInterface::getDescription ( ) const [private, pure virtual]

Get the description of this record.

Implemented in casa::TableRecord, and casa::Record.

Get the field number for the given field id.

It throws an exception if id is unrecognized (e.g. an unknown name).

Referenced by dataType().

Bool casa::RecordInterface::isDefined ( const String fieldName) const [inline]

Test if a field name exists.

Definition at line 546 of file RecordInterface.h.

References fieldNumber().

Referenced by casa::fieldSize(), casa::fieldType(), casa::isField(), casa::isFieldSet(), and casa::isValidRecord().

Is the Record structure fixed (i.e.

impossible to restructure or to add or remove fields)?

Definition at line 542 of file RecordInterface.h.

References Fixed, and type_p.

virtual void casa::RecordInterface::makeUnique ( ) [pure virtual]

Make a unique record representation (for copy-on-write in RecordFieldPtr).

Implemented in casa::TableRecord, and casa::Record.

Get the name of this field.

Referenced by casa::RecordFieldPtr< Array< Double > >::name().

Int casa::RecordInterface::newIdToNumber ( const RecordFieldId ) const [protected]

Get the field number for the given field id.

It returns -1 if an unknown name was given.

virtual uInt casa::RecordInterface::nfields ( ) const [pure virtual]

How many fields does this structure have?

Implemented in casa::TableRecord, and casa::Record.

Referenced by casa::isValidRecord(), and size().

RecordInterface& casa::RecordInterface::operator= ( const RecordInterface other)

Assignment (copy semantics).

This only assigns the RecordInterface object itself, thus not the data in a derived class. To do that the function assign below can be used.

virtual void casa::RecordInterface::print ( std::ostream &  ,
Int  maxNrValues = 25,
const String indent = "" 
) const [pure virtual]

Implemented in casa::TableRecord, and casa::Record.

Give access to the RecordType flag (write-access is needed when a record is read back).

Definition at line 550 of file RecordInterface.h.

References type_p.

Definition at line 554 of file RecordInterface.h.

References type_p.

virtual void casa::RecordInterface::removeField ( const RecordFieldId ) [pure virtual]

Remove a field from the record.


Caution: Removing a field means that the field number of the fields following it will be decremented; It will invalidate RecordFieldPtr's pointing to the removed field, but no other RecordFieldPtr's;

Implemented in casa::TableRecord, and casa::Record.

virtual void casa::RecordInterface::restructure ( const RecordDesc newDescription,
Bool  recursive = True 
) [pure virtual]

Change the structure of this Record to contain the fields in newDescription.

After calling restructure, description() == newDescription. Any existing RecordFieldPtr objects are invalidated (their isAttached() members return False) after this call.
If the new description contains subrecords, those subrecords will be restructured if recursive=True is given. Otherwise the subrecord is a variable empty record. Subrecords will be variable if their description is empty (i.e. does not contain any field), otherwise they are fixed.
Restructuring is not possible and an exception is thrown if the Record has a fixed structure.

Implemented in casa::TableRecord, and casa::Record.

virtual void casa::RecordInterface::setComment ( const RecordFieldId ,
const String comment 
) [pure virtual]

Set the comment for this field.

Implemented in casa::TableRecord, and casa::Record.

Get the actual shape of this field.

It returns [1] for non-array fields.

Referenced by casa::fieldSize(), casa::fieldType(), and casa::isFieldSet().

uInt casa::RecordInterface::size ( ) const [inline]

Definition at line 227 of file RecordInterface.h.

References nfields().

Referenced by empty().

void casa::RecordInterface::throwIfFixed ( ) const [protected]

Check if the Record has a non-fixed structure.

If it is fixed, it throws an exception. This can be used by other functions (like define).

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Bool > &  array 
) const [inline]

Definition at line 420 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayBool().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< uChar > &  array 
) const [inline]

Definition at line 422 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayuChar().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Short > &  array 
) const [inline]

Definition at line 424 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayShort().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Int > &  array 
) const [inline]

Definition at line 426 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayInt().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< uInt > &  array 
) const [inline]

Definition at line 428 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayuInt().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Int64 > &  array 
) const [inline]

Definition at line 430 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayInt64().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Float > &  array 
) const [inline]

Definition at line 432 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayFloat().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Double > &  array 
) const [inline]

Definition at line 434 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayDouble().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< Complex > &  array 
) const [inline]

Definition at line 436 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayComplex().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< DComplex > &  array 
) const [inline]

Definition at line 438 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayDComplex().

void casa::RecordInterface::toArray ( const RecordFieldId id,
Array< String > &  array 
) const [inline]

Definition at line 440 of file RecordInterface.h.

References casa::Array< T >::reference(), and toArrayString().

Get an array while promoting the data as needed.

Int values can be converted to Bool. A scalar value is also converted to an array. These functions are slower than asX, but more general.

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

Referenced by toArray().

virtual DataType casa::RecordInterface::type ( Int  whichField) const [pure virtual]

Get the data type of this field (as defined in DataType.h).

Implemented in casa::TableRecord, and casa::Record.

Referenced by dataType().


Friends And Related Function Documentation

std::ostream& operator<< ( std::ostream &  os,
const RecordInterface rec 
) [friend]

Print the contents of the record.

Only the first maxNrValues of an array will be printed. A value < 0 means the entire array.

Definition at line 479 of file RecordInterface.h.


Member Data Documentation

Definition at line 535 of file RecordInterface.h.

Holds the callback function plus argument.

Definition at line 534 of file RecordInterface.h.

Defines if the Record has a fixed structure.

Definition at line 538 of file RecordInterface.h.

Referenced by isFixed(), and recordType().


The documentation for this class was generated from the following file: