void DataMatrix::internalUpdate() { if (file()) { file()->writeLock(); } else { return; } // see if we can turn off skipping (only check if skipping enabled) if (_doSkip && _samplesPerFrameCache == 1 && _skip < 2) { _doSkip = false; } // first get the real start and end range int realXStart; int realYStart; int xSize = file()->matrix().optional(_field).xSize; int ySize = file()->matrix().optional(_field).ySize; if (_reqXStart < 0) { // counting from end realXStart = xSize - _reqNX; } else { realXStart = _reqXStart; } if (_reqYStart < 0) { // counting from end realYStart = ySize - _reqNY; } else { realYStart = _reqYStart; } if (_reqNX < 1) { // read to end _nX = xSize - _reqXStart; } else { _nX = _reqNX; } if (_reqNY < 1) { // read to end _nY = ySize - _reqYStart; } else { _nY = _reqNY; } // now do some sanity checks if (realXStart > xSize - 1) { realXStart = xSize - 1; } if (realXStart < 0) { realXStart = 0; } if (realYStart > ySize - 1) { realYStart = ySize - 1; } if (realYStart < 0) { realYStart = 0; } if (_nX < 1) { _nX = 1; } if (realXStart + _nX > xSize) { _nX = xSize - realXStart; } if (_nY < 1) { _nY = 1; } if (realYStart + _nY > ySize) { _nY = ySize - realYStart; } // do the reading; skip or non-skip version if (_doSkip) { doUpdateSkip(realXStart, realYStart); } else { doUpdateNoSkip(realXStart, realYStart); } // remember these as the last updated range _lastXStart = realXStart; _lastYStart = realYStart; _lastNX = _nX; _lastNY = _nY; _lastDoAve = _doAve; _lastDoSkip = _doSkip; _lastSkip = _skip; file()->unlock(); Matrix::internalUpdate(); }
KstObject::UpdateType KstRMatrix::doUpdate(bool force) { if (!_file) { return NO_CHANGE; } // see if we can turn off skipping (only check if skipping enabled) if (_doSkip && _samplesPerFrameCache == 1 && _skip < 2) { _doSkip = false; } // first get the real start and end range int xSize, ySize, realXStart, realYStart; _file->matrixDimensions(_field, &xSize, &ySize); if (_reqXStart < 0) { // counting from end realXStart = xSize - _reqNX; } else { realXStart = _reqXStart; } if (_reqYStart < 0) { // counting from end realYStart = ySize - _reqNY; } else { realYStart = _reqYStart; } if (_reqNX < 1) { // read to end _nX = xSize - _reqXStart; } else { _nX = _reqNX; } if (_reqNY < 1) { // read to end _nY = ySize - _reqYStart; } else { _nY = _reqNY; } // now do some sanity checks if (realXStart > xSize - 1) { realXStart = xSize - 1; } if (realXStart < 0) { realXStart = 0; } if (realYStart > ySize - 1) { realYStart = ySize - 1; } if (realYStart < 0) { realYStart = 0; } if (_nX < 1) { _nX = 1; } if (realXStart + _nX > xSize) { _nX = xSize - realXStart; } if (_nY < 1) { _nY = 1; } if (realYStart + _nY > ySize) { _nY = ySize - realYStart; } // do the reading; skip or non-skip version if (_doSkip) { if (!doUpdateSkip(realXStart, realYStart, force)) { return NO_CHANGE; } } else { if (!doUpdateNoSkip(realXStart, realYStart, force)) { return NO_CHANGE; } } // remember these as the last updated range _lastXStart = realXStart; _lastYStart = realYStart; _lastNX = _nX; _lastNY = _nY; _lastDoAve = _doAve; _lastDoSkip = _doSkip; _lastSkip = _skip; return KstMatrix::internalUpdate(UPDATE); }