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