FACT++  1.0
vector<int> CalculateBufferSize ( map< string, CCfits::Column * > &  colMap)

Calculates the required buffer size for reading one row of the current table. Also calculates the offsets to all the columns

Definition at line 122 of file simpleFitsDumper.cc.

References size.

Referenced by main().

123 {
124  vector<int> result;
125  map<int,int> sizes;
126  int size = 0;
127 
128  for (map<string, CCfits::Column*>::iterator it=colMap.begin(); it != colMap.end(); it++)
129  {
130  int width = it->second->width();
131  switch (it->second->type())
132  {
133  case CCfits::Tbyte:
134  case CCfits::Tushort:
135  case CCfits::Tshort:
136  sizes[it->second->index()] = sizeof(char)*width;
137  break;
138  case CCfits::Tuint:
139  case CCfits::Tint:
140  sizes[it->second->index()] = sizeof(int)*width;
141  break;
142  case CCfits::Tulong:
143  case CCfits::Tlong:
144  sizes[it->second->index()] = sizeof(int)*width;
145  break;
146  case CCfits::Tlonglong:
147  sizes[it->second->index()] = sizeof(long long)*width;
148  break;
149  case CCfits::Tfloat:
150  sizes[it->second->index()] = sizeof(float)*width;
151  break;
152  case CCfits::Tdouble:
153  sizes[it->second->index()] = sizeof(double)*width;
154  break;
155  case CCfits::Tnull:
156  case CCfits::Tbit:
157  case CCfits::Tlogical:
158  case CCfits::Tstring:
159  case CCfits::Tcomplex:
160  case CCfits::Tdblcomplex:
161  case CCfits::VTbit:
162  case CCfits::VTbyte:
163  case CCfits::VTlogical:
164  case CCfits::VTushort:
165  case CCfits::VTshort:
166  case CCfits::VTuint:
167  case CCfits::VTint:
168  case CCfits::VTulong:
169  case CCfits::VTlong:
170  case CCfits::VTlonglong:
171  case CCfits::VTfloat:
172  case CCfits::VTdouble:
173  case CCfits::VTcomplex:
174  case CCfits::VTdblcomplex:
175  cout << "Data type not implemented yet." << endl;
176  return vector<int>();
177  break;
178  default:
179  cout << "THIS SHOULD NEVER BE REACHED" << endl;
180  return vector<int>();
181  }
182  }
183  //calculate the offsets in the vector.
184  int checkIndex = 1;
185  for (map<int,int>::iterator it=sizes.begin(); it != sizes.end(); it++)
186  {
187  result.push_back(size);
188  size += it->second;
189  if (it->first != checkIndex)
190  {
191  cout << "Expected index " << checkIndex << " found " << it->first << endl;
192  }
193  checkIndex++;
194  }
195  result.push_back(size);
196  return result;
197 }
int size
Definition: db_dim_server.c:17

+ Here is the caller graph for this function: