#ifndef VISBUFFER2ADAPTER_H_
#define VISBUFFER2ADAPTER_H_
#include <msvis/MSVis/VisBuffer.h>
#include <msvis/MSVis/VisBuffer2.h>
#include <msvis/MSVis/VisBufferImpl2.h>
#include <casacore/casa/BasicSL/String.h>
#include <stdcasa/UtilJ.h>
#include <msvis/MSVis/VisibilityIterator2.h>
#include <msvis/MSVis/VisibilityIteratorImpl2.h>
using casa::utilj::toStdError;
#define IllegalOperation() \
Throw (casacore::String::format ("Illegal operation: %s", __func__));
#define CheckWritability() \
ThrowIf (vb2Rw_p == 0, casacore::String::format ("VB is not writable in %s", __func__));
class VisBuffer2Adapter : public VisBuffer {
VisBuffer2Adapter (VisBuffer2 * vb) : vb2_p (vb) , vb2Rw_p (vb)
VisBuffer2Adapter (const VisBuffer2 * vb) : msColumns_p (0), vb2_p (vb), vb2Rw_p (0)
const VisibilityIteratorImpl2 * vi =
dynamic_cast<const VisibilityIteratorImpl2 *>(
dynamic_cast<const VisBufferImpl2 *>(vb2_p)->getViiP());
msColumns_p = vi->msColumnsKluge();
vi->allSpectralWindowsSelected (spectralWindows_p, nChannels_p);
virtual VisBuffer & assign(const VisBuffer &, casacore::Bool = true) {IllegalOperation();}
virtual VisBuffer * clone () const {IllegalOperation();}
virtual void invalidate(){IllegalOperation();}
virtual casacore::Int & nCorr() { nCorr_p = vb2_p->nCorrelations(); return nCorr_p;}
virtual casacore::Int nCorr() const { return vb2_p-> nCorrelations(); }
virtual casacore::Int & nChannel() { nChannelsScalar_p = vb2_p-> nChannels(); return nChannelsScalar_p;}
virtual casacore::Int nChannel() const { return vb2_p-> nChannels(); }
virtual casacore::Vector<casacore::Int>& channel() { IllegalOperation (); }
virtual const casacore::Vector<casacore::Int>& channel() const { IllegalOperation(); }
virtual casacore::Int & nRow() { nRows_p = vb2_p->nRows (); return nRows_p;}
virtual casacore::Vector<casacore::Int>& antenna1() { return const_cast<casacore::Vector<casacore::Int>&> (vb2_p-> antenna1());}
virtual const casacore::Vector<casacore::Int>& antenna1() const { return vb2_p-> antenna1(); }
virtual casacore::Vector<casacore::Int>& antenna2() { return const_cast<casacore::Vector<casacore::Int>&> (vb2_p-> antenna2());}
virtual const casacore::Vector<casacore::Int>& antenna2() const { return vb2_p-> antenna2(); }
virtual casacore::Vector<casacore::Int>& feed1() { return const_cast<casacore::Vector<casacore::Int>&> (vb2_p-> feed1());}
virtual const casacore::Vector<casacore::Int>& feed1() const { return vb2_p-> feed1(); }
virtual casacore::Vector<casacore::Int>& feed2() { return const_cast<casacore::Vector<casacore::Int>&> (vb2_p-> feed2());}
virtual const casacore::Vector<casacore::Int>& feed2() const { return vb2_p-> feed2(); }