Loading...
Searching...
No Matches
LSQTraits.h
Go to the documentation of this file.
//# LSQTraits.h: Typing support classes for LSQ classes
//# Copyright (C) 2004
//# 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 SCIMATH_LSQTRAITS_H
#define SCIMATH_LSQTRAITS_H
//# Includes
#include <casacore/casa/aips.h>
#include <complex>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
//# Forward Declarations
// <summary> Typing support classes for LSQ classes </summary>
// <reviewed reviewer="Wim Brouw" date="2004/04/01" tests="tLSQFit, tLSQaips"
// demos="">
// </reviewed>
// <synopsis>
// The following classes are used in detremining the type of iterator
// presented to the LSQFit class. They are for a large part based on ideas by
// Alexandrescu(2001), 'Modern C++ design'.
// </synopsis>
// <example>
// See <linkto class="LSQFit">LSQFit</linkto> class, especially the
// <src>LSQFit2.cc</src>
// defintion file.
// </example>
// <motivation>
// To ease the interface to Fitting (and probably other) classes, by producing
// a framework that can be used with Casacore containers.
// </motivation>
// <todo asof="2004/04/01">
// <li> Add more type info if and when needed
// </todo>
// Type of real numeric class indicator
class LSQReal {
typedef LSQReal value_type;
};
// <summary> Type of complex numeric class indicator </summary>
class LSQComplex {
typedef LSQComplex value_type;
};
// <summary> Non relevant class indicator </summary>
class LSQNull {};
// <summary> Determine if pointer type </summary>
template <class T>
class LSQType {
private:
template <class U> struct PointerTraits {
enum { result = False };
typedef LSQNull Pointee;
};
template <class U> struct PointerTraits<U*> {
enum { result = True };
typedef U Pointee;
};
public:
enum { isPointer = PointerTraits<T>::result };
typedef typename PointerTraits<T>::Pointee Pointee;
};
// <summary> Traits for numeric classes used </summary>
template <class T>
class LSQTraits {
public:
// Defining type
typedef T value_type;
// Numeric base type
typedef Char base;
// Numeric type
typedef Char num_type;
// Number of basic numeric type elements
enum { size = 0 };
};
#if defined LSQTraits_F
#undef LSQTraits_F
#endif
#define LSQTraits_F LSQTraits
// <summary>LSQTraits specialization for Float</summary>
template <> class LSQTraits_F<Float> {
public:
typedef Float value_type;
typedef Float base;
typedef LSQReal num_type;
enum { size = 1 };
};
#undef LSQTraits_F
#if defined LSQTraits_D
#undef LSQTraits_D
#endif
#define LSQTraits_D LSQTraits
// <summary>LSQTraits specialization for Double</summary>
template <> class LSQTraits_D<Double> {
public:
typedef Double value_type;
typedef Double base;
typedef LSQReal num_type;
enum { size = 1 };
};
#undef LSQTraits_D
#if defined LSQTraits_CD
#undef LSQTraits_CD
#endif
#define LSQTraits_CD LSQTraits
// <summary>LSQTraits specialization for DComplex </summary>
template <> class LSQTraits_CD<std::complex<Double> > {
public:
typedef std::complex<Double> value_type;
typedef Double base;
typedef LSQComplex num_type;
enum { size = 2 };
};
#undef LSQTraits_CD
#if defined LSQTraits_CF
#undef LSQTraits_CF
#endif
#define LSQTraits_CF LSQTraits
// <summary>LSQTraits specialization for Complex </summary>
template <> class LSQTraits_CF<std::complex<Float> > {
public:
typedef std::complex<Float> value_type;
typedef Float base;
typedef LSQComplex num_type;
enum { size = 2 };
};
#undef LSQTraits_CF
} //# NAMESPACE CASACORE - END
#endif
LSQTraits_F
#define LSQTraits_F
Definition LSQTraits.h:109
LSQTraits_CD
#define LSQTraits_CD
Definition LSQTraits.h:137
LSQTraits_D
#define LSQTraits_D
Definition LSQTraits.h:123
LSQTraits_CF
#define LSQTraits_CF
Definition LSQTraits.h:151
casacore::LSQComplex
Type of complex numeric class indicator.
Definition LSQTraits.h:69
casacore::LSQComplex::value_type
LSQComplex value_type
Definition LSQTraits.h:70
casacore::LSQNull
Non relevant class indicator.
Definition LSQTraits.h:74
casacore::LSQReal
Definition LSQTraits.h:63
casacore::LSQReal::value_type
LSQReal value_type
Definition LSQTraits.h:64
casacore::LSQTraits_CD< std::complex< Double > >::size
@ size
Definition LSQTraits.h:145
casacore::LSQTraits_CD< std::complex< Double > >::num_type
LSQComplex num_type
Definition LSQTraits.h:144
casacore::LSQTraits_CD< std::complex< Double > >::value_type
std::complex< Double > value_type
Definition LSQTraits.h:142
casacore::LSQTraits_CD< std::complex< Double > >::base
Double base
Definition LSQTraits.h:143
casacore::LSQTraits_CF< std::complex< Float > >::value_type
std::complex< Float > value_type
Definition LSQTraits.h:156
casacore::LSQTraits_CF< std::complex< Float > >::size
@ size
Definition LSQTraits.h:159
casacore::LSQTraits_CF< std::complex< Float > >::num_type
LSQComplex num_type
Definition LSQTraits.h:158
casacore::LSQTraits_CF< std::complex< Float > >::base
Float base
Definition LSQTraits.h:157
casacore::LSQTraits_D< Double >::num_type
LSQReal num_type
Definition LSQTraits.h:130
casacore::LSQTraits_D< Double >::value_type
Double value_type
Definition LSQTraits.h:128
casacore::LSQTraits_D< Double >::size
@ size
Definition LSQTraits.h:131
casacore::LSQTraits_D< Double >::base
Double base
Definition LSQTraits.h:129
casacore::LSQTraits_F< Float >::value_type
Float value_type
Definition LSQTraits.h:114
casacore::LSQTraits_F< Float >::base
Float base
Definition LSQTraits.h:115
casacore::LSQTraits_F< Float >::num_type
LSQReal num_type
Definition LSQTraits.h:116
casacore::LSQTraits_F< Float >::size
@ size
Definition LSQTraits.h:117
casacore::LSQTraits
Traits for numeric classes used.
Definition LSQTraits.h:95
casacore::LSQTraits::size
@ size
Definition LSQTraits.h:104
casacore::LSQTraits::num_type
Char num_type
Numeric type.
Definition LSQTraits.h:102
casacore::LSQTraits::base
Char base
Numeric base type.
Definition LSQTraits.h:100
casacore::LSQTraits::value_type
T value_type
Defining type.
Definition LSQTraits.h:98
casacore::LSQType
Determine if pointer type.
Definition LSQTraits.h:78
casacore::LSQType::Pointee
PointerTraits< T >::Pointee Pointee
Definition LSQTraits.h:90
casacore::LSQType::isPointer
@ isPointer
Definition LSQTraits.h:89
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::False
const Bool False
Definition aipstype.h:42
casacore::Float
float Float
Definition aipstype.h:52
casacore::True
const Bool True
Definition aipstype.h:41
casacore::Double
double Double
Definition aipstype.h:53
casacore::Char
char Char
Definition aipstype.h:44
std
Define real & complex conjugation for non-complex types and put comparisons into std namespace.
Definition Complex.h:350
casacore::LSQType::PointerTraits< U * >::result
@ result
Definition LSQTraits.h:85
casacore::LSQType::PointerTraits< U * >::Pointee
U Pointee
Definition LSQTraits.h:86
casacore::LSQType::PointerTraits
Definition LSQTraits.h:80
casacore::LSQType::Pointee::result
@ result
Definition LSQTraits.h:81
casacore::LSQType::PointerTraits::Pointee
LSQNull Pointee
Definition LSQTraits.h:82