#include <components/SpectralComponents/CompiledSpectralElement.h>
#include <components/SpectralComponents/GaussianSpectralElement.h>
#include <components/SpectralComponents/GaussianMultipletSpectralElement.h>
#include <components/SpectralComponents/LorentzianSpectralElement.h>
#include <components/SpectralComponents/PolynomialSpectralElement.h>
#include <components/SpectralComponents/PowerLogPolynomialSpectralElement.h>
#include <casacore/casa/Exceptions/Error.h>
#include <casacore/casa/BasicMath/Math.h>
using namespace casacore;
ostream &operator<<(ostream &os, const SpectralElement &elem) {
switch (elem.getType()) {
case SpectralElement::GAUSSIAN:
os << *dynamic_cast<const GaussianSpectralElement*>(&elem);
case SpectralElement::POLYNOMIAL:
os << *dynamic_cast<const PolynomialSpectralElement*>(&elem);
case SpectralElement::COMPILED:
case SpectralElement::POWERLOGPOLY:
case SpectralElement::LOGTRANSPOLY:
os << *dynamic_cast<const CompiledSpectralElement*>(&elem);
case SpectralElement::GMULTIPLET:
os << *dynamic_cast<const GaussianMultipletSpectralElement*>(&elem);
case SpectralElement::LORENTZIAN:
os << *dynamic_cast<const LorentzianSpectralElement*>(&elem);
throw AipsError("SpectralElement2::<<((): Logic Error. Unhandled spectral element type");