Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc0bf53f authored by Jeff Brown's avatar Jeff Brown
Browse files

Clean up CursorWindow code.

Bug: 5332296

The code is functionally equivalent, but a little more efficient
and much easier to maintain.

Change-Id: I90670a13799df05831843a5137ab234929281b7c
parent badf8a55
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -143,8 +143,6 @@ public:
                         */
    uint32_t            alloc(size_t size, bool aligned = false);

    uint32_t            read_field_slot(int row, int column, field_slot_t * slot);

                        /**
                         * Copy data into the window at the given offset.
                         */
@@ -181,6 +179,32 @@ public:
                                return ((field_slot_t *)offsetToPtr(fieldDirOffset)) + column;
                            }

    int64_t getFieldSlotValueLong(field_slot_t* fieldSlot) {
#if WINDOW_STORAGE_INLINE_NUMERICS
        return fieldSlot->data.l;
#else
        return copyOutLong(fieldSlot->data.buffer.offset);
#endif
    }

    double getFieldSlotValueDouble(field_slot_t* fieldSlot) {
#if WINDOW_STORAGE_INLINE_NUMERICS
        return fieldSlot->data.d;
#else
        return copyOutDouble(fieldSlot->data.buffer.offset);
#endif
    }

#if WINDOW_STORAGE_UTF8
    char* getFieldSlotValueString(field_slot_t* fieldSlot) {
        return reinterpret_cast<char*>(offsetToPtr(fieldSlot->data.buffer.offset));
    }
#else
    char16_t* getFieldSlotValueString(field_slot_t* fieldSlot) {
        return reinterpret_cast<char16_t*>(offsetToPtr(fieldSlot->data.buffer.offset));
    }
#endif

private:
    uint8_t * mData;
    size_t mSize;
+3 −38
Original line number Diff line number Diff line
@@ -236,33 +236,6 @@ field_slot_t * CursorWindow::getFieldSlotWithCheck(int row, int column)
  return ((field_slot_t *)offsetToPtr(fieldDirOffset)) + column;  
}

uint32_t CursorWindow::read_field_slot(int row, int column, field_slot_t * slotOut)
{
    if (row < 0 || row >= mHeader->numRows || column < 0 || column >= mHeader->numColumns) {
        LOGE("Can't read row# %d, col# %d from CursorWindow. Make sure your Cursor is initialized correctly.",
                row, column);
        return -1;
    }        
    row_slot_t * rowSlot = getRowSlot(row);
    if (!rowSlot) {
        LOGE("Failed to find rowSlot for row %d", row);
        return -1;
    }
    if (rowSlot->offset == 0 || rowSlot->offset >= mSize) {
        LOGE("Invalid rowSlot, offset = %d", rowSlot->offset);
        return -1;
    }
LOG_WINDOW("Found field directory for %d,%d at rowSlot %d, offset %d", row, column, (uint8_t *)rowSlot - mData, rowSlot->offset);
    field_slot_t * fieldDir = (field_slot_t *)offsetToPtr(rowSlot->offset);
LOG_WINDOW("Read field_slot_t %d,%d: offset = %d, size = %d, type = %d", row, column, fieldDir[column].data.buffer.offset, fieldDir[column].data.buffer.size, fieldDir[column].type);

    // Copy the data to the out param
    slotOut->data.buffer.offset = fieldDir[column].data.buffer.offset;
    slotOut->data.buffer.size = fieldDir[column].data.buffer.size;
    slotOut->type = fieldDir[column].type;
    return 0;
}

void CursorWindow::copyIn(uint32_t offset, uint8_t const * data, size_t size)
{
    assert(offset + size <= mSize);    
@@ -371,11 +344,7 @@ bool CursorWindow::getLong(unsigned int row, unsigned int col, int64_t * valueOu
        return false;
    }

#if WINDOW_STORAGE_INLINE_NUMERICS
    *valueOut = fieldSlot->data.l;
#else
    *valueOut = copyOutLong(fieldSlot->data.buffer.offset);
#endif
    *valueOut = getFieldSlotValueLong(fieldSlot);
    return true;
}

@@ -386,11 +355,7 @@ bool CursorWindow::getDouble(unsigned int row, unsigned int col, double * valueO
        return false;
    }

#if WINDOW_STORAGE_INLINE_NUMERICS
    *valueOut = fieldSlot->data.d;
#else
    *valueOut = copyOutDouble(fieldSlot->data.buffer.offset);
#endif
    *valueOut = getFieldSlotValueDouble(fieldSlot);
    return true;
}