25 #include <CCfits/CCfits>
26 #include <boost/lexical_cast.hpp>
27 #include <boost/tokenizer.hpp>
38 for (
int i=1; i<=table_hdu.numCols(); ++i) {
49 if (format[0] ==
'A') {
51 }
else if (format[0] ==
'I') {
52 return typeid(int64_t);
53 }
else if (format[0] ==
'F') {
54 return typeid(double);
55 }
else if (format[0] ==
'E') {
56 return typeid(double);
57 }
else if (format[0] ==
'D') {
58 return typeid(double);
65 if (format[0] ==
'L') {
67 }
else if (format[0] ==
'B') {
68 return typeid(int32_t);
69 }
else if (format[0] ==
'I') {
70 return typeid(int32_t);
71 }
else if (format[0] ==
'J') {
72 return typeid(int32_t);
73 }
else if (format[0] ==
'K') {
74 return typeid(int64_t);
75 }
else if (format.
back() ==
'A') {
77 }
else if (format[0] ==
'E') {
79 }
else if (format[0] ==
'D') {
80 return typeid(double);
81 }
else if (shape.
empty()) {
82 if (format.
back() ==
'B') {
84 }
else if (format.
back() ==
'I') {
86 }
else if (format.
back() ==
'J') {
88 }
else if (format.
back() ==
'K') {
90 }
else if (format.
back() ==
'E') {
92 }
else if (format.
back() ==
'D') {
96 if (format.
back() ==
'B') {
98 }
else if (format.
back() ==
'I') {
100 }
else if (format.
back() ==
'J') {
102 }
else if (format.
back() ==
'K') {
104 }
else if (format.
back() ==
'E') {
106 }
else if (format.
back() ==
'D') {
117 auto subtdim = tdim.
substr(1, tdim.
size() - 2);
118 boost::char_separator<char> sep{
","};
119 boost::tokenizer<boost::char_separator<char>> tok{subtdim, sep};
120 for (
auto&
s : tok) {
121 result.push_back(boost::lexical_cast<size_t>(
s));
131 for (
int i=1; i<=table_hdu.numCols(); i++) {
132 auto& column = table_hdu.column(i);
134 if (
typeid(table_hdu) ==
typeid(CCfits::BinTable)) {
146 for (
int i=1; i<=table_hdu.numCols(); ++i) {
147 units.
push_back(table_hdu.column(i).unit());
154 for (
int i=1; i<=table_hdu.numCols(); ++i) {
157 if (key != table_hdu.keyWord().end()) {
158 key->second->value(desc);
160 descriptions.push_back(desc);
168 column.read(data, first, last);
170 for (
auto value : data) {
179 column.readArrays(data, first, last);
181 for (
auto& valar : data) {
190 column.readArrays(data, first, last);
194 for (
auto& valar : data) {
205 if (type ==
typeid(
bool)) {
206 return convertScalarColumn<bool>(column, first, last);
207 }
if (type ==
typeid(int32_t)) {
208 return convertScalarColumn<int32_t>(column, first, last);
209 }
if (type ==
typeid(int64_t)) {
210 return convertScalarColumn<int64_t>(column, first, last);
211 }
if (type ==
typeid(
float)) {
212 return convertScalarColumn<float>(column, first, last);
213 }
if (type ==
typeid(
double)) {
214 return convertScalarColumn<double>(column, first, last);
216 return convertScalarColumn<std::string>(column, first, last);
218 return convertVectorColumn<int32_t>(column, first, last);
220 return convertVectorColumn<int64_t>(column, first, last);
222 return convertVectorColumn<float>(column, first, last);
224 return convertVectorColumn<double>(column, first, last);
226 return convertNdArrayColumn<int32_t>(column, first, last);
228 return convertNdArrayColumn<int64_t>(column, first, last);
230 return convertNdArrayColumn<float>(column, first, last);
232 return convertNdArrayColumn<double>(column, first, last);