CCfits 2.6

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List

FITSUtilT.h
1 // Astrophysics Science Division,
2 // NASA/ Goddard Space Flight Center
3 // HEASARC
4 // http://heasarc.gsfc.nasa.gov
5 // e-mail: ccfits@legacy.gsfc.nasa.gov
6 //
7 // Original author: Ben Dorman
8
9 #ifndef FITSUTILT_H
10 #define FITSUTILT_H
11
12 #ifdef _MSC_VER
13 #include "MSconfig.h" // for truncation warning
14 #endif
15
16
17 #include "FITSUtil.h"
18
19 #include<typeinfo>
20 #include<iostream>
21
22 #ifdef SSTREAM_DEFECT
23 #include <strstream>
24 #else
25 #include<sstream>
26 #endif
27
28 namespace CCfits
29 {
30
31 namespace FITSUtil
32 {
33
34 // vector to vector conversion.
35
36 template <typename S, typename T>
37 void
38 fill(std::vector<S>& outArray, const std::vector<T>& inArray, size_t first, size_t last)
39 {
40 // vector to vector assign. stdlib takes care of deletion.
41 int range = last - first + 1;
42 if (outArray.size() != static_cast<size_t>(range)) outArray.resize(range);
43 for (size_t j = first - 1; j < last; ++j)
44 {
45 outArray[j - first + 1] = static_cast<S>(inArray[j]);
46 }
47 }
48
49 // vector to valarray conversion.
50
51 template <typename S, typename T>
52 void fill(std::valarray<S>& outArray, const std::vector<T>& inArray, size_t first, size_t last)
53 {
54 // vector to valarray assign
55 int range = last - first + 1;
56 if (outArray.size() != static_cast<size_t>(range)) outArray.resize(range);
57 for (size_t j = first - 1; j < last; ++j)
58 {
59 outArray[j - first + 1] = static_cast<S>(inArray[j]);
60 }
61 }
62 // valarray to valarray conversion.
63
64
65 template <typename S, typename T>
66 void fill(std::valarray<S>& outArray, const std::valarray<T>& inArray)
67 {
68 size_t n = inArray.size();
69 if (outArray.size() != n) outArray.resize(n);
70 for (size_t j = 0;j < n; ++j) outArray[j]
71 = static_cast<S>(inArray[j]);
72 }
73
74 #ifdef TEMPLATE_AMBIG7_DEFECT
75 template <typename S, typename T>
76 void fillMSva(std::vector<S>& outArray, const std::valarray<T>& inArray)
77 {
78 size_t n = inArray.size();
79 if (outArray.size() != n) outArray.resize(n);
80 for (size_t j = 0;j < n; ++j) outArray[j]
81 = static_cast<S>(inArray[j]);
82 }
83
84 #else
85 template <typename S, typename T>
86 void fill(std::vector<S>& outArray, const std::valarray<T>& inArray)
87 {
88 size_t n = inArray.size();
89 if (outArray.size() != n) outArray.resize(n);
90 for (size_t j = 0;j < n; ++j) outArray[j]
91 = static_cast<S>(inArray[j]);
92 }
93 #endif
94
95 // throw exceptions for string conversions to anything other than string.
96
97
98 template <typename T>
99 void
100 fill(std::vector<string>& outArray, const std::vector<T>& inArray, size_t first, size_t last)
101 {
102 first = 0;
103 last = 0;
104 throw InvalidConversion(errorMessage(outArray,inArray),false);
105
106 }
107
108 template <typename T>
109 void fill(std::vector<T>& outArray, const std::vector<string>& inArray, size_t first, size_t last)
110 {
111 first = 0;
112 last = 0;
113 throw InvalidConversion(errorMessage(outArray,inArray),false);
114 }
115
116
117
118
119 template<typename S, typename T>
120 string errorMessage( const S& out, const T& in)
121 {
122 #ifdef SSTREAM_DEFECT
123 std::ostrstream errMsg;
124 #else
125 std::ostringstream errMsg;
126 #endif
127 errMsg << " Error: no conversion from " << typeid(in).name() << " to "
128 << typeid(out).name() << std::endl;
129 return errMsg.str();
130
131 }
132
133 }
134
135 } // namespace CCfits
136
137
138 #endif