docs: public Object cacheGetMove(int iRowOrRelative, int iRowCount, int iAbsoluteRow, boolean bGet) throws DBException, RemoteException
      {
          m_bhtGet = bGet;
          m_objCurrentPhysicalRecord = NONE;
          m_objCurrentCacheRecord = NONE;
          m_iCurrentLogicalPosition = iAbsoluteRow;
          if ((m_iPhysicalLastRecordPlusOne != -1) && (m_iCurrentLogicalPosition >= m_iPhysicalLastRecordPlusOne))
              return FieldTable.EOF_RECORD;
          try   {
              Object objData = null;
              if ((m_mapCache == null) && (m_htCache == null))
                  m_mapCache = new ArrayCache();
              if (m_mapCache != null) if (iAbsoluteRow != -1)
                  objData = m_mapCache.get(iAbsoluteRow);   // Try to find this in the cache
              if (objData == NONE)
              {
                  objData = FieldTable.DELETED_RECORD;        // Deleted record
              }
              else if (objData != null)
              {
                  m_objCurrentCacheRecord = new Integer(iAbsoluteRow);
              }
              else if (objData == null)
              {
                  m_objCurrentLockedRecord = NONE;    // You lose your lock on physical move.
                  if (m_mapCache != null)
                      if (iAbsoluteRow == m_mapCache.getEndIndex() + 1)
                          iRowCount = MULTIPLE_READ_COUNT;    // If you are adding to the end of the cache, try reading a bunch at once.
                  if (bGet)
                      objData = m_tableRemote.get(iRowOrRelative, iRowCount);
                  else
                      objData = m_tableRemote.doMove(iRowOrRelative, iRowCount);
                  if (objData instanceof Vector)
                      if (((Vector)objData).size() > 1)
                          if (!(((Vector)objData).get(0) instanceof Vector))
                              iRowCount = 1;  // Multiple read not supported (This vector is a record).
                  if (objData instanceof Vector)
                  {
                      if (m_mapCache != null)
                      {
                          m_objCurrentCacheRecord = new Integer(m_iCurrentLogicalPosition);
                          if (iRowCount == 1)
                          {
                              m_mapCache.set(m_iCurrentLogicalPosition, objData);
                              m_objCurrentPhysicalRecord = m_objCurrentCacheRecord;
                          }
                          else
                          {
                              Vector<Object> objectVector = (Vector)objData;
                              for (int i = objectVector.size() - 1; i >= 0; i--)
                              {   // I go in reverse, so the objData object will be the object at the iAbsoluteRow.
                                  objData = objectVector.get(i);
                                  if (objData instanceof Vector)
                                  {
                                      if (iAbsoluteRow != -1)
                                      {
                                          m_mapCache.set(iAbsoluteRow + i, objData);
                                          if (i == objectVector.size() - 1)
                                              m_objCurrentPhysicalRecord = new Integer(iAbsoluteRow + i);
                                      }
                                  }
                                  else
                                if ((m_iPhysicalLastRecordPlusOne == -1) || (m_iPhysicalLastRecordPlusOne <= m_iCurrentLogicalPosition + i))
                                      m_iPhysicalLastRecordPlusOne = m_iCurrentLogicalPosition + i;   // Recordstatus = EOF
                                else
                                    objData = FieldTable.DELETED_RECORD;        // Deleted record
                              }
                          }
                      }
                  }
                  else
                  {
                      if ((m_iPhysicalLastRecordPlusOne == -1) || (m_iPhysicalLastRecordPlusOne <= m_iCurrentLogicalPosition))
                          m_iPhysicalLastRecordPlusOne = m_iCurrentLogicalPosition;
                      else
                      {
                          if ((!FieldTable.DELETED_RECORD.equals(objData)) && (!FieldTable.EOF_RECORD.equals(objData)))
                              objData = FieldTable.DELETED_RECORD;        // Deleted record (if not one that I recognize)
                      }
                  }
              }
              return objData;
          } catch (RemoteException ex) {
              throw ex;
          }
      }