SplitArray::SplitArray(ArrayDesc const& desc, const boost::shared_array<char>& src, Coordinates const& from, Coordinates const& till, shared_ptr<Query>const& query) : DelegateArray(desc, shared_ptr<Array>(), true), _startingChunk(from), _from(from), _till(till), _size(from.size()), _src(src), _empty(false) { assert(query); _query = query; desc.getChunkPositionFor(_startingChunk); Dimensions const& dims = desc.getDimensions(); for (size_t i = 0, n = dims.size(); i < n; i++) { _size[i] = _till[i] - _from[i] + 1; if (_size[i] == 0) { _empty = true; } if (_till[i] > dims[i].getEndMax()) { _till[i] = dims[i].getEndMax(); } } }