| 180 | } |
| 181 | |
| 182 | std::vector<shared_ptr<XdmfHeavyDataController> > |
| 183 | getControllersExcludingStep(unsigned int stepId, |
| 184 | std::vector<unsigned int> stepDims, |
| 185 | std::vector<shared_ptr<XdmfHeavyDataController> > datasetControllers) |
| 186 | { |
| 187 | std::vector<shared_ptr<XdmfHeavyDataController> > returnVector; |
| 188 | if (datasetControllers.size() > 0) |
| 189 | { |
| 190 | unsigned int sizePerStep = 1; |
| 191 | for (unsigned int i = 0; i < stepDims.size(); ++i) |
| 192 | { |
| 193 | sizePerStep *= stepDims[i]; |
| 194 | } |
| 195 | unsigned int offset = sizePerStep * stepId; |
| 196 | unsigned int sizeRemaining = sizePerStep; |
| 197 | //printf("base offset = %u\nstarting size remaining = %u\ncutting from %u controllers\n", offset, sizeRemaining, datasetControllers.size()); |
| 198 | // grabbing the subset is a little different for each type |
| 199 | // Right now we assume controllers are of the same type |
| 200 | for (unsigned int controllerIndex = 0; controllerIndex < datasetControllers.size(); ++controllerIndex) |
| 201 | { |
| 202 | //printf("offset = %u out of controller size %u\n", offset, datasetControllers[controllerIndex]->getSize()); |
| 203 | if (offset >= datasetControllers[controllerIndex]->getSize()) |
| 204 | { |
| 205 | // The removed step isn't in the controller provided |
| 206 | // Simply add it back into the return set |
| 207 | returnVector.push_back(datasetControllers[controllerIndex]); |
| 208 | // then subtract the size from the offset |
| 209 | offset -= datasetControllers[controllerIndex]->getSize(); |
| 210 | } |
| 211 | else |
| 212 | { |
| 213 | // The removed step is inside the controller provided |
| 214 | if (offset > 0) |
| 215 | { |
| 216 | //printf("removed step is inside this controller\n"); |
| 217 | // If offset is greater than zero the controller has a section chopped off the front |
| 218 | std::vector<unsigned int> newDim; |
| 219 | newDim.push_back(offset); |
| 220 | // Dataspace is the same |
| 221 | // stride is the same |
| 222 | // start is the same |
| 223 | // TODO dims is reduced to just cover the offset size |
| 224 | if (datasetControllers[controllerIndex]->getName().compare("Binary") == 0) { |
| 225 | shared_ptr<XdmfBinaryController> createdController = |
| 226 | XdmfBinaryController::New(datasetControllers[controllerIndex]->getFilePath(), |
| 227 | datasetControllers[controllerIndex]->getType(), |
| 228 | shared_dynamic_cast<XdmfBinaryController>( |
| 229 | datasetControllers[controllerIndex])->getEndian(), |
| 230 | shared_dynamic_cast<XdmfBinaryController>( |
| 231 | datasetControllers[controllerIndex])->getSeek(), |
| 232 | datasetControllers[controllerIndex]->getStart(), |
| 233 | datasetControllers[controllerIndex]->getStride(), |
| 234 | newDim, |
| 235 | datasetControllers[controllerIndex]->getDataspaceDimensions()); |
| 236 | returnVector.push_back(createdController); |
| 237 | } |
| 238 | else if (datasetControllers[controllerIndex]->getName().compare("HDF") == 0) { |
| 239 | // TODO |
no test coverage detected