Loading...
Searching...
No Matches
MSMBase.h
Go to the documentation of this file.
//# MSMBase.h: Base class for storage manager for tables using memory
//# Copyright (C) 2003
//# 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: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef TABLES_MSMBASE_H
#define TABLES_MSMBASE_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/tables/DataMan/DataManager.h>
#include <casacore/casa/Containers/Block.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
class MSMColumn;
// <summary>
// Base class for memory-based table storage manager class
// </summary>
// <use visibility=local>
// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
// </reviewed>
// <prerequisite>
//# Classes you should understand before using this one.
// <li> <linkto class=DataManager>DataManager</linkto>
// </prerequisite>
// <etymology>
// MSMBase is the base class for MemoryStMan.
// </etymology>
// <synopsis>
// See class <linkto class=MemoryStMan>MemoryStMan</linkto> for
// the description.
// </synopsis>
class MSMBase : public DataManager
{
public:
// Create a memory storage manager.
// Its name will be blank.
MSMBase();
// Create a memory storage manager with the given name.
// Its name can be used later in e.g. Table::addColumn to
// add a column to this storage manager.
// <br> Note that the 2nd constructor is needed for table creation
// from a record specification.
// <group>
MSMBase (const String& storageManagerName);
MSMBase (const String& storageManagerName, const Record&);
// </group>
virtual ~MSMBase();
// Clone this object.
// It does not clone MSMColumn objects possibly used.
virtual DataManager* clone() const;
// Get the type name of the data manager (i.e. MemoryStMan).
virtual String dataManagerType() const;
// Get the name given to this storage manager.
virtual String dataManagerName() const;
// Set the hasPut_p flag. In this way the StManAipsIOColumn objects
// can indicate that data have been put.
void setHasPut()
{ hasPut_p = True; }
// Get the nr of rows in this storage manager.
rownr_t nrow() const
{ return nrrow_p; }
// Does the storage manager allow to add rows? (yes)
virtual Bool canAddRow() const;
// Does the storage manager allow to delete rows? (yes)
virtual Bool canRemoveRow() const;
// Does the storage manager allow to add columns? (yes)
virtual Bool canAddColumn() const;
// Does the storage manager allow to delete columns? (yes)
virtual Bool canRemoveColumn() const;
// Make the object from the string.
// This function gets registered in the DataManager "constructor" map.
static DataManager* makeObject (const String& dataManagerType,
const Record& spec);
private:
// Flush and optionally fsync the data.
// It does not done anything and always returns a False status.
virtual Bool flush (AipsIO&, Bool fsync);
// Let the storage manager create the nr of rows needed.
virtual void create64 (rownr_t nrrow);
// Open the storage manager file for an existing table.
// It fills the rows with 0 values.
virtual rownr_t open64 (rownr_t nrrow, AipsIO&);
// Let the data manager initialize itself further.
// It creates nr of rows (given to create) if needed.
// Note this is done after reallocateColumn.
virtual void prepare();
// Resync the storage manager with the new file contents.
// It adds or removes rows as needed.
// It cannot know which rows are deleted, so it always deletes
// the last rows.
virtual rownr_t resync64 (rownr_t nrrow);
// The data manager will be deleted (because all its columns are
// requested to be deleted).
// It does not have to do anything.
virtual void deleteManager();
// Add rows to all columns.
virtual void addRow64 (rownr_t nrrow);
// Delete a row from all columns.
virtual void removeRow64 (rownr_t rownr);
// Create a column in the storage manager on behalf of a table column.
// <group>
// Create a scalar column.
virtual DataManagerColumn* makeScalarColumn (const String& name, int dataType,
const String& dataTypeID);
// Create a direct array column.
virtual DataManagerColumn* makeDirArrColumn (const String& name, int dataType,
const String& dataTypeID);
// Create an indirect array column.
virtual DataManagerColumn* makeIndArrColumn (const String& name, int dataType,
const String& dataTypeID);
// </group>
// The MemoryStMan wants to do reallocateColumn.
virtual Bool canReallocateColumns() const;
// Reallocate the column object if it is part of this data manager.
// It returns a pointer to the new column object.
// It is used to replace an MSMIndColumn object for indirect array with
// a fixed shape by an MSMDirColumn object.
virtual DataManagerColumn* reallocateColumn (DataManagerColumn* column);
// Add a column.
virtual void addColumn (DataManagerColumn*);
// Delete a column.
virtual void removeColumn (DataManagerColumn*);
protected:
// Name given by user to this storage manager.
String stmanName_p;
// The number of rows in the columns.
rownr_t nrrow_p;
// The number of rows in create().
rownr_t nrrowCreate_p;
// The assembly of all columns.
Block<MSMColumn*> colSet_p;
// Has anything been put since the last flush?
Bool hasPut_p;
};
} //# NAMESPACE CASACORE - END
#endif
casacore::AipsIO
Definition AipsIO.h:167
casacore::Block
Definition Block.h:140
casacore::DataManagerColumn
Definition DataManagerColumn.h:149
casacore::DataManager::DataManager
DataManager()
Default constructor.
casacore::MSMBase::prepare
virtual void prepare()
Let the data manager initialize itself further.
casacore::MSMBase::open64
virtual rownr_t open64(rownr_t nrrow, AipsIO &)
Open the storage manager file for an existing table.
casacore::MSMBase::deleteManager
virtual void deleteManager()
The data manager will be deleted (because all its columns are requested to be deleted).
casacore::MSMBase::canRemoveColumn
virtual Bool canRemoveColumn() const
Does the storage manager allow to delete columns?
casacore::MSMBase::nrow
rownr_t nrow() const
Get the nr of rows in this storage manager.
Definition MSMBase.h:101
casacore::MSMBase::MSMBase
MSMBase()
Create a memory storage manager.
casacore::MSMBase::colSet_p
Block< MSMColumn * > colSet_p
The assembly of all columns.
Definition MSMBase.h:192
casacore::MSMBase::dataManagerType
virtual String dataManagerType() const
Get the type name of the data manager (i.e.
casacore::MSMBase::flush
virtual Bool flush(AipsIO &, Bool fsync)
Flush and optionally fsync the data.
casacore::MSMBase::hasPut_p
Bool hasPut_p
Has anything been put since the last flush?
Definition MSMBase.h:194
casacore::MSMBase::create64
virtual void create64(rownr_t nrrow)
Let the storage manager create the nr of rows needed.
casacore::MSMBase::~MSMBase
virtual ~MSMBase()
casacore::MSMBase::MSMBase
MSMBase(const String &storageManagerName, const Record &)
casacore::MSMBase::reallocateColumn
virtual DataManagerColumn * reallocateColumn(DataManagerColumn *column)
Reallocate the column object if it is part of this data manager.
casacore::MSMBase::removeRow64
virtual void removeRow64(rownr_t rownr)
Delete a row from all columns.
casacore::MSMBase::canReallocateColumns
virtual Bool canReallocateColumns() const
The MemoryStMan wants to do reallocateColumn.
casacore::MSMBase::removeColumn
virtual void removeColumn(DataManagerColumn *)
Delete a column.
casacore::MSMBase::canRemoveRow
virtual Bool canRemoveRow() const
Does the storage manager allow to delete rows?
casacore::MSMBase::canAddRow
virtual Bool canAddRow() const
Does the storage manager allow to add rows?
casacore::MSMBase::MSMBase
MSMBase(const String &storageManagerName)
Create a memory storage manager with the given name.
casacore::MSMBase::makeDirArrColumn
virtual DataManagerColumn * makeDirArrColumn(const String &name, int dataType, const String &dataTypeID)
Create a direct array column.
casacore::MSMBase::setHasPut
void setHasPut()
Set the hasPut_p flag.
Definition MSMBase.h:97
casacore::MSMBase::makeScalarColumn
virtual DataManagerColumn * makeScalarColumn(const String &name, int dataType, const String &dataTypeID)
Create a column in the storage manager on behalf of a table column.
casacore::MSMBase::nrrowCreate_p
rownr_t nrrowCreate_p
The number of rows in create().
Definition MSMBase.h:190
casacore::MSMBase::addRow64
virtual void addRow64(rownr_t nrrow)
Add rows to all columns.
casacore::MSMBase::resync64
virtual rownr_t resync64(rownr_t nrrow)
Resync the storage manager with the new file contents.
casacore::MSMBase::stmanName_p
String stmanName_p
Name given by user to this storage manager.
Definition MSMBase.h:186
casacore::MSMBase::addColumn
virtual void addColumn(DataManagerColumn *)
Add a column.
casacore::MSMBase::canAddColumn
virtual Bool canAddColumn() const
Does the storage manager allow to add columns?
casacore::MSMBase::makeObject
static DataManager * makeObject(const String &dataManagerType, const Record &spec)
Make the object from the string.
casacore::MSMBase::clone
virtual DataManager * clone() const
Clone this object.
casacore::MSMBase::dataManagerName
virtual String dataManagerName() const
Get the name given to this storage manager.
casacore::MSMBase::nrrow_p
rownr_t nrrow_p
The number of rows in the columns.
Definition MSMBase.h:188
casacore::MSMBase::makeIndArrColumn
virtual DataManagerColumn * makeIndArrColumn(const String &name, int dataType, const String &dataTypeID)
Create an indirect array column.
casacore::MSMColumn
Definition MSMColumn.h:102
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::Record
Record()
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::name
String name() const
Return the name of the field.
Definition RecordField.h:163
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40
casacore::True
const Bool True
Definition aipstype.h:41
casacore::rownr_t
uInt64 rownr_t
Define the type of a row number in a table.
Definition aipsxtype.h:44
casacore::dataType
DataType dataType(const RecordFieldId &) const