Changeset 265 for XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.cpp
- Timestamp:
- 09/06/11 11:57:45 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/src/xmlio/output/onetcdf4.cpp
r254 r265 142 142 } 143 143 144 StdString CONetCDF4::getUnlimitedDimensionName(void) 145 { 146 char full_name_in[NC_MAX_NAME +1]; 147 int grpid = this->getGroup(path); 148 int dimid = this->getUnlimitedDimension(); 149 150 if (dimid == -1) return (std::string()); 151 CheckError(nc_inq_dimname(grpid, dimid, full_name_in)); 152 153 StdString dimname(full_name_in); 154 return (dimname); 155 } 156 144 157 //--------------------------------------------------------------- 145 158 … … 166 179 return (retvalue); 167 180 } 181 182 std::vector<std::string> CONetCDF4::getDimensionsIdList (const std::string * _varname) 183 { 184 char full_name_in[NC_MAX_NAME +1]; 185 int nbdim = 0, *dimid = NULL; 186 int grpid = this->getCurrentGroup(); 187 int varid = (_varname != NULL) ? this->getVariable(*_varname) : NC_GLOBAL; 188 std::vector<std::string> retvalue; 189 190 if (_varname != NULL) 191 { 192 CheckError(nc_inq_varndims(grpid, varid, &nbdim)); 193 dimid = new int[nbdim](); 194 CheckError(nc_inq_vardimid(grpid, varid, dimid)); 195 } 196 else 197 { 198 CheckError(nc_inq_dimids(grpid, &nbdim, NULL, 1)); 199 dimid = new int[nbdim](); 200 CheckError(nc_inq_dimids(grpid, NULL, dimid, 1)); 201 } 202 203 for (int i = 0; i < nbdim; i++) 204 { 205 CheckError(nc_inq_dimname(grpid, dimid[i], full_name_in)); 206 std::string dimname(full_name_in); 207 retvalue.push_back(dimname); 208 } 209 delete [] dimid; 210 211 return (retvalue); 212 } 213 168 214 169 215 //--------------------------------------------------------------- … … 271 317 const std::vector<StdSize> * start, 272 318 const std::vector<StdSize> * count) 273 { 274 std::vector<StdSize> sizes = this->getDimensions(name); 275 std::vector<StdSize>::const_iterator 319 { 320 std::vector<std::size_t> sizes = this->getDimensions(name); 321 std::vector<std::string> iddims = this->getDimensionsIdList (&name); 322 std::vector<std::size_t>::const_iterator 276 323 it = sizes.begin(), end = sizes.end(); 277 324 int i = 0; 325 326 if (iddims.begin()->compare(this->getUnlimitedDimensionName()) == 0) 327 { 328 sstart.push_back(record); 329 scount.push_back(1); 330 if ((start == NULL) && 331 (count == NULL)) i++; 332 it++; 333 } 278 334 279 335 for (;it != end; it++) 280 { 281 StdSize s = *it; 336 { 282 337 if ((start != NULL) && (count != NULL)) 283 338 { 284 if (s == UNLIMITED_DIM) 285 { 286 sstart.push_back(record); 287 scount.push_back(1); 288 } 289 else 290 { 291 sstart.push_back((*start)[i]); 292 scount.push_back((*count)[i]); 293 array_size *= (*count)[i]; 294 i++; 295 } 339 sstart.push_back((*start)[i]); 340 scount.push_back((*count)[i]); 341 array_size *= (*count)[i]; 342 i++; 296 343 } 297 344 else 298 345 { 299 if (s == UNLIMITED_DIM) 300 { 301 sstart.push_back(record); 302 scount.push_back(1); 303 } 304 else 305 { 306 sstart.push_back(0); 307 scount.push_back(sizes[i]); 308 array_size *= sizes[i]; 309 } 346 sstart.push_back(0); 347 scount.push_back(sizes[i]); 348 array_size *= sizes[i]; 310 349 i++; 311 350 } 312 351 } 352 353 354 // for (StdSize u = 0; u < sstart.size(); u++) 355 // std::cout << "(" << sstart[u] << "," << scount[u] << ")" ; 356 // std::cout << std::endl; 313 357 } 314 358
Note: See TracChangeset
for help on using the changeset viewer.