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

Commit 1087c53f authored by Tadashi G. Takaoka's avatar Tadashi G. Takaoka
Browse files

Add InputPointers.append() method

Change-Id: Id2b0e242f7e9ce0ca888067857f8b64c02fde84e
parent 9c0ddb59
Loading
Loading
Loading
Loading
+39 −8
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.inputmethod.latin;

import java.util.Arrays;

// TODO: Add unit test
public class InputPointers {
    private final ScalableIntArray mXCoordinates = new ScalableIntArray();
    private final ScalableIntArray mYCoordinates = new ScalableIntArray();
@@ -52,6 +53,25 @@ public class InputPointers {
        mTimes.copy(ip.mTimes);
    }

    /**
     * Append the pointers in the specified {@link InputPointers} to the end of this.
     * @param src the source {@link InputPointers} to append the pointers.
     * @param startPos the starting index of the pointers in {@code src}.
     * @param length the number of pointers to be appended.
     */
    public void append(InputPointers src, int startPos, int length) {
        final int currentLength = getPointerSize();
        final int newLength = currentLength + length;
        mXCoordinates.ensureCapacity(newLength);
        mYCoordinates.ensureCapacity(newLength);
        mPointerIds.ensureCapacity(newLength);
        mTimes.ensureCapacity(newLength);
        System.arraycopy(src.getXCoordinates(), startPos, getXCoordinates(), currentLength, length);
        System.arraycopy(src.getYCoordinates(), startPos, getYCoordinates(), currentLength, length);
        System.arraycopy(src.getPointerIds(), startPos, getPointerIds(), currentLength, length);
        System.arraycopy(src.getTimes(), startPos, getTimes(), currentLength, length);
    }

    public void reset() {
        mXCoordinates.reset();
        mYCoordinates.reset();
@@ -64,19 +84,19 @@ public class InputPointers {
    }

    public int[] getXCoordinates() {
        return mXCoordinates.mArray;
        return mXCoordinates.getPrimitiveArray();
    }

    public int[] getYCoordinates() {
        return mYCoordinates.mArray;
        return mYCoordinates.getPrimitiveArray();
    }

    public int[] getPointerIds() {
        return mPointerIds.mArray;
        return mPointerIds.getPrimitiveArray();
    }

    public int[] getTimes() {
        return mTimes.mArray;
        return mTimes.getPrimitiveArray();
    }

    private static class ScalableIntArray {
@@ -98,14 +118,24 @@ public class InputPointers {
        }

        public void add(int val) {
            if (mLength >= mArray.length) {
                final int[] newArray = new int[mLength * 2];
                System.arraycopy(mArray, 0, newArray, 0, mLength);
            }
            ensureCapacity(mLength);
            mArray[mLength] = val;
            ++mLength;
        }

        public void ensureCapacity(int minimumCapacity) {
            if (mArray.length < minimumCapacity) {
                final int nextCapacity = mArray.length * 2;
                grow(minimumCapacity > nextCapacity ? minimumCapacity : nextCapacity);
            }
        }

        private void grow(int newCapacity) {
            final int[] newArray = new int[newCapacity];
            System.arraycopy(mArray, 0, newArray, 0, mLength);
            mArray = newArray;
        }

        public int getLength() {
            return mLength;
        }
@@ -121,6 +151,7 @@ public class InputPointers {

        public void copy(ScalableIntArray ip) {
            mArray = Arrays.copyOf(ip.mArray, ip.mArray.length);
            mLength = ip.mLength;
        }

        public void set(ScalableIntArray ip) {