1359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka/* 2359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * Copyright (C) 2012 The Android Open Source Project 3359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * 4359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * you may not use this file except in compliance with the License. 6359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * You may obtain a copy of the License at 7359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * 8359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * 10359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * See the License for the specific language governing permissions and 14359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka * limitations under the License. 15359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka */ 16359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 17e28eba5074664d5716b8e58b8d0a235746b261ebKen Wakasapackage com.android.inputmethod.latin.utils; 18359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 19d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalardimport java.util.Arrays; 20d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 21359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaokapublic final class CoordinateUtils { 22359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka private static final int INDEX_X = 0; 23359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka private static final int INDEX_Y = 1; 24d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard private static final int ELEMENT_SIZE = INDEX_Y + 1; 25359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 26359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka private CoordinateUtils() { 27359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka // This utility class is not publicly instantiable. 28359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka } 29359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 30359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka public static int[] newInstance() { 31d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard return new int[ELEMENT_SIZE]; 32359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka } 33359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 34359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka public static int x(final int[] coords) { 35359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka return coords[INDEX_X]; 36359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka } 37359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka 38359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka public static int y(final int[] coords) { 39359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka return coords[INDEX_Y]; 40359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka } 41547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka 42547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka public static void set(final int[] coords, final int x, final int y) { 43547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka coords[INDEX_X] = x; 44547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka coords[INDEX_Y] = y; 45547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka } 46547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka 47547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka public static void copy(final int[] destination, final int[] source) { 48547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka destination[INDEX_X] = source[INDEX_X]; 49547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka destination[INDEX_Y] = source[INDEX_Y]; 50547b638194c05f971003edb06c3c6c489a76da5fTadashi G. Takaoka } 51d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 52d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static int[] newCoordinateArray(final int arraySize) { 530acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa return new int[ELEMENT_SIZE * arraySize]; 541d6e647ac31eab38f30b8ed468551d1e3a07c705Jean Chalard } 551d6e647ac31eab38f30b8ed468551d1e3a07c705Jean Chalard 561d6e647ac31eab38f30b8ed468551d1e3a07c705Jean Chalard public static int[] newCoordinateArray(final int arraySize, 570acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa final int defaultX, final int defaultY) { 580acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa final int[] result = new int[ELEMENT_SIZE * arraySize]; 590acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa for (int i = 0; i < arraySize; ++i) { 600acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa setXYInArray(result, i, defaultX, defaultY); 610acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa } 620acd121083baf137dc81cd2c5ce4214a9848a82dKen Wakasa return result; 63d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 64d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 65d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static int xFromArray(final int[] coordsArray, final int index) { 66d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard return coordsArray[ELEMENT_SIZE * index + INDEX_X]; 67d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 68d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 69d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static int yFromArray(final int[] coordsArray, final int index) { 70d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard return coordsArray[ELEMENT_SIZE * index + INDEX_Y]; 71d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 72d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 73d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static int[] coordinateFromArray(final int[] coordsArray, final int index) { 74d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard final int baseIndex = ELEMENT_SIZE * index; 75d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard return Arrays.copyOfRange(coordsArray, baseIndex, baseIndex + ELEMENT_SIZE); 76d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 77d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 78d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static void setXYInArray(final int[] coordsArray, final int index, 79d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard final int x, final int y) { 80d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard final int baseIndex = ELEMENT_SIZE * index; 81d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard coordsArray[baseIndex + INDEX_X] = x; 82d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard coordsArray[baseIndex + INDEX_Y] = y; 83d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 84d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard 85d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard public static void setCoordinateInArray(final int[] coordsArray, final int index, 86d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard final int[] coords) { 87d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard final int baseIndex = ELEMENT_SIZE * index; 88d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard coordsArray[baseIndex + INDEX_X] = coords[INDEX_X]; 89d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard coordsArray[baseIndex + INDEX_Y] = coords[INDEX_Y]; 90d1f463eacfaac31a999f7eb1ecaa1668ed3038d4Jean Chalard } 91359c35e0f6e534d096efc1d9f2ff585139e3b3acTadashi G. Takaoka} 92