code: private void rollingUpdate(final long paramOldHash) throws TTException {
          final ITreeData newNode = mDelegate.getCurrentNode();
          final long newNodeHash = newNode.hashCode();
          long resultNew = newNode.hashCode();
  
          // go the path to the root
          do {
              synchronized (mDelegate.getCurrentNode()) {
                  getPtx().getData(mDelegate.getCurrentNode().getDataKey());
                  if (mDelegate.getCurrentNode().getDataKey() == newNode.getDataKey()) {
                      resultNew = mDelegate.getCurrentNode().getHash() - paramOldHash;
                      resultNew = resultNew + newNodeHash;
                  } else {
                      resultNew = mDelegate.getCurrentNode().getHash() - (paramOldHash * PRIME);
                      resultNew = resultNew + newNodeHash * PRIME;
                  }
                  mDelegate.getCurrentNode().setHash(resultNew);
                  getPtx().setData(mDelegate.getCurrentNode());
              }
          } while (moveTo(mDelegate.getCurrentNode().getParentKey()));
  
          mDelegate.setCurrentNode(newNode);
      }
docs: Adapting the structure with a rolling hash for all ancestors only with
  update.
  
  @param paramOldHash
  paramOldHash to be removed
  @throws TTIOException
  if anything weird happened