casacore
Loading...
Searching...
No Matches
LSQTraits.h
Go to the documentation of this file.
1//# LSQTraits.h: Typing support classes for LSQ classes
2//# Copyright (C) 2004
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id$
27#ifndef SCIMATH_LSQTRAITS_H
28#define SCIMATH_LSQTRAITS_H
29
30//# Includes
31#include <casacore/casa/aips.h>
32#include <complex>
33
34namespace casacore { //# NAMESPACE CASACORE - BEGIN
35
36//# Forward Declarations
37
38// <summary> Typing support classes for LSQ classes </summary>
39// <reviewed reviewer="Wim Brouw" date="2004/04/01" tests="tLSQFit, tLSQaips"
40// demos="">
41// </reviewed>
42
43// <synopsis>
44// The following classes are used in detremining the type of iterator
45// presented to the LSQFit class. They are for a large part based on ideas by
46// Alexandrescu(2001), 'Modern C++ design'.
47// </synopsis>
48
49// <example>
50// See <linkto class="LSQFit">LSQFit</linkto> class, especially the
51// <src>LSQFit2.cc</src>
52// defintion file.
53// </example>
54
55// <motivation>
56// To ease the interface to Fitting (and probably other) classes, by producing
57// a framework that can be used with Casacore containers.
58// </motivation>
59
60// <todo asof="2004/04/01">
61// <li> Add more type info if and when needed
62// </todo>
63
64// Type of real numeric class indicator
65class LSQReal {
67};
68
69// <summary> Type of complex numeric class indicator </summary>
70class LSQComplex {
74// <summary> Non relevant class indicator </summary>
75class LSQNull {};
77// <summary> Determine if pointer type </summary>
78template <class T>
79class LSQType {
80 private:
81 template <class U> struct PointerTraits {
82 enum { result = False };
84 };
85 template <class U> struct PointerTraits<U*> {
86 enum { result = True };
87 typedef U Pointee;
88 };
89 public:
92};
93
94// <summary> Traits for numeric classes used </summary>
95template <class T>
96class LSQTraits {
97 public:
98 // Defining type
99 typedef T value_type;
100 // Numeric base type
101 typedef Char base;
102 // Numeric type
103 typedef Char num_type;
104 // Number of basic numeric type elements
105 enum { size = 0 };
107
108#if defined LSQTraits_F
109#undef LSQTraits_F
110#endif
111#define LSQTraits_F LSQTraits
112// <summary>LSQTraits specialization for Float</summary>
113template <> class LSQTraits_F<Float> {
114 public:
115 typedef Float value_type;
116 typedef Float base;
118 enum { size = 1 };
120#undef LSQTraits_F
121
122#if defined LSQTraits_D
123#undef LSQTraits_D
124#endif
125#define LSQTraits_D LSQTraits
126// <summary>LSQTraits specialization for Double</summary>
127template <> class LSQTraits_D<Double> {
128 public:
129 typedef Double value_type;
130 typedef Double base;
132 enum { size = 1 };
134#undef LSQTraits_D
135
136#if defined LSQTraits_CD
137#undef LSQTraits_CD
138#endif
139#define LSQTraits_CD LSQTraits
140// <summary>LSQTraits specialization for DComplex </summary>
141template <> class LSQTraits_CD<std::complex<Double> > {
142 public:
143 typedef std::complex<Double> value_type;
144 typedef Double base;
146 enum { size = 2 };
148#undef LSQTraits_CD
149
150#if defined LSQTraits_CF
151#undef LSQTraits_CF
152#endif
153#define LSQTraits_CF LSQTraits
154// <summary>LSQTraits specialization for Complex </summary>
155template <> class LSQTraits_CF<std::complex<Float> > {
156 public:
157 typedef std::complex<Float> value_type;
158 typedef Float base;
160 enum { size = 2 };
162#undef LSQTraits_CF
163
164
165} //# NAMESPACE CASACORE - END
166
167#endif
#define LSQTraits_F
Definition LSQTraits.h:111
#define LSQTraits_CD
Definition LSQTraits.h:139
#define LSQTraits_D
Definition LSQTraits.h:125
#define LSQTraits_CF
Definition LSQTraits.h:153
Type of complex numeric class indicator
Definition LSQTraits.h:71
LSQComplex value_type
Definition LSQTraits.h:72
Non relevant class indicator
Definition LSQTraits.h:76
LSQReal value_type
Definition LSQTraits.h:66
Traits for numeric classes used
Definition LSQTraits.h:97
Char num_type
Numeric type.
Definition LSQTraits.h:104
Char base
Numeric base type.
Definition LSQTraits.h:102
T value_type
Defining type.
Definition LSQTraits.h:100
Determine if pointer type
Definition LSQTraits.h:80
PointerTraits< T >::Pointee Pointee
Definition LSQTraits.h:92
this file contains all the compiler specific defines
Definition mainpage.dox:28
const Bool False
Definition aipstype.h:44
float Float
Definition aipstype.h:54
const Bool True
Definition aipstype.h:43
double Double
Definition aipstype.h:55
char Char
Definition aipstype.h:46
Define real & complex conjugation for non-complex types and put comparisons into std namespace.
Definition Complex.h:352