GridBlockInternal *GridBlockInternal::clone(quint64 newRasterId) { GridBlockInternal *block = new GridBlockInternal(blockNr(), newRasterId, _size.xsize(), _size.ysize()); block->init(); std::copy(_data.begin(), _data.end(), block->_data.begin()); block->_inMemory = true; block->save2Cache(); // as a result, block->_inMemory becomes false return block; }
char *Grid::blockAsMemory(quint32 block) { if ( _blocks[block]->inMemory() ) { // no load needed GridBlockInternal *du = _blocks[block]; char * p = du->blockAsMemory(); return p; } Locker<> lock(_mutex); if(!update(block, true)) return 0; GridBlockInternal *du = _blocks[block]; char * p = du->blockAsMemory(); return p; }
char *Grid::blockAsMemory(quint32 block, bool creation) { if ( _allInMemory) { // no cache case GridBlockInternal *du = _blocks[block]; char * p = du->blockAsMemory(); return p; } Locker<> lock(_mutex); if(!update(block, creation)) return 0; GridBlockInternal *du = _blocks[_cache[block]]; char * p = du->blockAsMemory(); return p; }
GridBlockInternal *GridBlockInternal::clone() { GridBlockInternal *block = new GridBlockInternal(_id, i64UNDEF, _size.xsize(), _size.ysize()); block->prepare(); block->_undef = _undef; block->_blockSize = _blockSize; if(!inMemory()) loadFromCache(); else if (!_initialized){ needData(); } std::copy(_data.begin(), _data.end(), block->_data.begin()); return block; }