casa
$Rev:20696$
|
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>
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.
Internal
VLAT is the Visibility LookAhead Thread. It is not related to the more common NRAO acronym VLA.
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.
typedef vector<VlatFunctor *> casa::asyncio::VLAT::Fillers [protected] |
void casa::asyncio::VLAT::alignWriteIterator | ( | SubChunkPair | subchunk | ) | [protected] |
void casa::asyncio::VLAT::applyModifiers | ( | ROVisibilityIterator * | rovi, |
VisibilityIterator * | vi | ||
) | [protected] |
void casa::asyncio::VLAT::checkFiller | ( | VisBufferComponents::EnumType | id | ) | [protected] |
void casa::asyncio::VLAT::createFillerDictionary | ( | ) | [protected] |
void casa::asyncio::VLAT::fillDatum | ( | VlaDatum * | datum | ) | [protected] |
void casa::asyncio::VLAT::fillDatumMiscellanyAfter | ( | VlaDatum * | datum | ) | [protected] |
void casa::asyncio::VLAT::fillDatumMiscellanyBefore | ( | VlaDatum * | datum | ) | [protected] |
void casa::asyncio::VLAT::fillLsrInfo | ( | VlaDatum * | datum | ) | [protected] |
void casa::asyncio::VLAT::flushWrittenData | ( | ) | [protected] |
void casa::asyncio::VLAT::handleWrite | ( | ) | [protected] |
void casa::asyncio::VLAT::initialize | ( | const ROVisibilityIterator & | rovi | ) |
void casa::asyncio::VLAT::initialize | ( | const Block< MeasurementSet > & | mss, |
const Block< Int > & | sortColumns, | ||
Bool | addDefaultSortCols, | ||
Double | timeInterval, | ||
Bool | writable | ||
) |
Bool casa::asyncio::VLAT::isTerminated | ( | ) | const |
void* casa::asyncio::VLAT::run | ( | ) | [protected, virtual] |
Implements casa::async::Thread.
void casa::asyncio::VLAT::setModifiers | ( | RoviaModifiers & | modifiers | ) |
void casa::asyncio::VLAT::setPrefetchColumns | ( | const PrefetchColumns & | prefetchColumns | ) |
Bool casa::asyncio::VLAT::sweepTerminationRequested | ( | ) | const [protected] |
void casa::asyncio::VLAT::sweepVi | ( | ) | [protected] |
void casa::asyncio::VLAT::terminate | ( | ) | [virtual] |
Reimplemented from casa::async::Thread.
void casa::asyncio::VLAT::throwIfSweepTerminated | ( | ) | [protected] |
Bool casa::asyncio::VLAT::waitForViReset | ( | ) | [protected] |
void casa::asyncio::VLAT::waitUntilFillCanStart | ( | ) | [protected] |
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;
};
Fillers casa::asyncio::VLAT::fillers_p [private] |
volatile Bool casa::asyncio::VLAT::sweepTerminationRequested_p [private] |
Bool casa::asyncio::VLAT::threadTerminated_p [private] |
VlaData* casa::asyncio::VLAT::vlaData_p [private] |