void AllVersionsChunk::setInputChunk(ConstChunk const& inputChunk, VersionID version) { DelegateChunk::setInputChunk(inputChunk); isClone = true; currVersion = version; prependVersion(firstPos, inputChunk.getFirstPosition(false), version); prependVersion(lastPos, inputChunk.getLastPosition(false), version); prependVersion(firstPosWithOverlap, inputChunk.getFirstPosition(true), version); prependVersion(lastPosWithOverlap, inputChunk.getLastPosition(true), version); }
void ShiftChunk::setInputChunk(ConstChunk const& inputChunk) { DelegateChunk::setInputChunk(inputChunk); isClone = true; array.in2out(inputChunk.getFirstPosition(false), firstPos); array.in2out(inputChunk.getLastPosition(false), lastPos); }
void ConcatChunk::setInputChunk(ConstChunk const& inputChunk) { DelegateChunk::setInputChunk(inputChunk); ConcatArrayIterator const& arrayIterator((ConcatArrayIterator const&)iterator); Coordinate shift = arrayIterator.shift; isClone = inputChunk.getArrayDesc().getDimensions()[CONCAT_DIM].getChunkOverlap() == 0; direct = true; firstPos = inputChunk.getFirstPosition(false); firstPosWithOverlap = inputChunk.getFirstPosition(true); lastPos = inputChunk.getLastPosition(false); lastPosWithOverlap = inputChunk.getLastPosition(true); if (shift != 0) { firstPos[CONCAT_DIM] += shift; firstPosWithOverlap[CONCAT_DIM] += shift; lastPos[CONCAT_DIM] += shift; lastPosWithOverlap[CONCAT_DIM] += shift; } }
boost::shared_ptr<MemChunk> MaterializedArray::getMaterializedChunk(ConstChunk const& inputChunk) { bool newChunk = false; boost::shared_ptr<MemChunk> chunk; boost::shared_ptr<ConstRLEEmptyBitmap> bitmap; Coordinates const& pos = inputChunk.getFirstPosition(false); AttributeID attr = inputChunk.getAttributeDesc().getId(); { ScopedMutexLock cs(_mutex); chunk = _chunkCache[attr][pos]; if (!chunk) { chunk.reset(new MemChunk()); bitmap = _bitmapCache[pos]; newChunk = true; } } if (newChunk) { boost::shared_ptr<Query> query(Query::getValidQueryPtr(_query)); materialize(query, *chunk, inputChunk, _format); if (!bitmap) { bitmap = chunk->getEmptyBitmap(); } chunk->setEmptyBitmap(bitmap); { ScopedMutexLock cs(_mutex); if (_chunkCache[attr].size() >= _cacheSize) { _chunkCache[attr].erase(_chunkCache[attr].begin()); } _chunkCache[attr][pos] = chunk; if (_bitmapCache.size() >= _cacheSize) { _bitmapCache.erase(_bitmapCache.begin()); } _bitmapCache[pos] = bitmap; } } return chunk; }