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

VLAT is the Visibility LookAhead Thread. This thread advances a visibility iterator and fills the data indicated by the visibility iterator into the VlaData buffer ring. More...

#include <VLAT.h>

Inheritance diagram for casa::asyncio::VLAT:
casa::async::Thread

List of all members.

Classes

class  FillerDictionary
class  SweepTerminated

Public Member Functions

 VLAT (AsynchronousInterface *)
 ~VLAT ()
void clearFillTerminationRequest ()
void initialize (const ROVisibilityIterator &rovi)
void initialize (const Block< MeasurementSet > &mss, const Block< Int > &sortColumns, Bool addDefaultSortCols, Double timeInterval, Bool writable)
Bool isTerminated () const
void setModifiers (RoviaModifiers &modifiers)
void setPrefetchColumns (const PrefetchColumns &prefetchColumns)
void requestSweepTermination ()
void terminate ()

Protected Types

typedef vector< VlatFunctor * > Fillers

Protected Member Functions

void applyModifiers (ROVisibilityIterator *rovi, VisibilityIterator *vi)
void alignWriteIterator (SubChunkPair subchunk)
void checkFiller (VisBufferComponents::EnumType id)
void createFillerDictionary ()
void fillDatum (VlaDatum *datum)
void fillDatumMiscellanyAfter (VlaDatum *datum)
void fillDatumMiscellanyBefore (VlaDatum *datum)
void fillLsrInfo (VlaDatum *datum)
void flushWrittenData ()
void handleWrite ()
void * run ()
Bool sweepTerminationRequested () const
void sweepVi ()
void throwIfSweepTerminated ()
Bool waitForViReset ()
void waitUntilFillCanStart ()

Private Attributes

const InterfaceController * controller_p
 class NullaryPredicate { public:
FillerDictionary fillerDictionary_p
Fillers fillers_p
AsynchronousInterfaceinterface_p
Block< MeasurementSetmeasurementSets_p
SubChunkPair readSubchunk_p
RoviaModifiers roviaModifiers_p
volatile Bool sweepTerminationRequested_p
Bool threadTerminated_p
ROVisibilityIteratorvisibilityIterator_p
VlaDatavlaData_p
VisibilityIteratorwriteIterator_p
SubChunkPair writeSubchunk_p

Detailed Description

VLAT is the Visibility LookAhead Thread. This thread advances a visibility iterator and fills the data indicated by the visibility iterator into the VlaData buffer ring.

Intended use:

Internal

Review Status

Date Reviewed:
yyyy/mm/dd

Prerequisite

Etymology

VLAT is the Visibility LookAhead Thread. It is not related to the more common NRAO acronym VLA.

Synopsis

The VLAT is a thread object that buffers up data from successive visibility iterator positions in a MeasurementSet. It is part of the backend to a ROVisibilityIteratorAsync (ROVIA) object used by the main thread to replace the normal, synchronous ROVisibilityIterator. When the user creates a ROVIA object the information normally used to create a ROVisibilityIterator is passed to the VLAT which uses it to create a ROVisibilityIterator local to itself. The VLAT then uses this ROVisibilityIterator to fill buffers in the VlaData-managed buffer ring (this interaction is described in VlaData). Filling consists of attaching VLAT's ROVisibilityIterator to the VisBufferAsync object associated with a buffer and then calling the fill operations for the data items (e.g., visCube, Ant1, etc.) which the user has requested be prefetched. The fill operations will likely result in synchronous I/O operations being performed by the column access methods related to the Table system (memory-resident tables, columns, etc., may be able to satisfy a fill operation without performing I/O).

The thread may be terminated by calling the terminate method. This will cause the VLAT to terminate when it notices the termination request. The termination may not be immediate since the VLAT may be engaged in a syncrhonous I/O operation and is uanble to detect the termination request until that I/O has completed.

Normally the VLAT sweeps the VI to the end of the measurement set and then awaits further instructions. The main thread may stop the sweep early by calling VlaData::terminateSweep which will eventually be detected by the VLAT and result in a coordinated reset of the sweep. When the sweep reset is applied the VLAT will also detect visibility iterator modification requests (e.g., setRowBlocking, selectChannel, setInterval, etc.) that were queued up in VlaData; for the set of available VI modification requests supported see ROVisibilityIteratorAsync.

Example

Motivation

Thrown Exceptions

Definition at line 213 of file VLAT.h.


Member Typedef Documentation

typedef vector<VlatFunctor *> casa::asyncio::VLAT::Fillers [protected]

Definition at line 248 of file VLAT.h.


Constructor & Destructor Documentation


Member Function Documentation

void casa::asyncio::VLAT::alignWriteIterator ( SubChunkPair  subchunk) [protected]
void casa::asyncio::VLAT::fillDatum ( VlaDatum datum) [protected]
void casa::asyncio::VLAT::fillLsrInfo ( VlaDatum datum) [protected]
void casa::asyncio::VLAT::handleWrite ( ) [protected]
void casa::asyncio::VLAT::initialize ( const Block< MeasurementSet > &  mss,
const Block< Int > &  sortColumns,
Bool  addDefaultSortCols,
Double  timeInterval,
Bool  writable 
)
void* casa::asyncio::VLAT::run ( ) [protected, virtual]

Implements casa::async::Thread.

void casa::asyncio::VLAT::setPrefetchColumns ( const PrefetchColumns prefetchColumns)
void casa::asyncio::VLAT::sweepVi ( ) [protected]
void casa::asyncio::VLAT::terminate ( ) [virtual]

Reimplemented from casa::async::Thread.


Member Data Documentation

const InterfaceController* casa::asyncio::VLAT::controller_p [private]

class NullaryPredicate { public:

virtual ~NullaryPredicate () {}
virtual Bool operator () () const = 0;

};

class FillCanStartOrSweepTermination : public NullaryPredicate {

public:

FillCanStartOrSweepTermination (VlaData * vlaData, AsynchronousInterface * interface)
: interface_p (interface),
  vlaData_p (vlaData)
{}

Bool operator() () const
{
    return vlaData_p->fillCanStart () || interface_p->isSweepTerminationRequested ();
}

private:

AsynchronousInterface * interface_p;
VlaData * vlaData_p;

};

class ViResetOrLookaheadTermination : public NullaryPredicate {

public:

ViResetOrLookaheadTermination (AsynchronousInterface * interface)
: interface_p (interface)
{}

Bool operator() () const
{
    Bool viWasReset_p = interface_p->viResetRequested;

    return viWasReset_p || interface_p->isLookaheadTerminationRequested ();
}

private:

AsynchronousInterface * interface_p;

};

Definition at line 318 of file VLAT.h.

Definition at line 319 of file VLAT.h.

Definition at line 320 of file VLAT.h.

Definition at line 321 of file VLAT.h.

Definition at line 322 of file VLAT.h.

Definition at line 323 of file VLAT.h.

Definition at line 324 of file VLAT.h.

Definition at line 325 of file VLAT.h.

Definition at line 326 of file VLAT.h.

Definition at line 327 of file VLAT.h.

Definition at line 328 of file VLAT.h.

Definition at line 329 of file VLAT.h.

Definition at line 330 of file VLAT.h.


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