125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams/*
26a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Copyright (C) 2013 The Android Open Source Project
325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Licensed under the Apache License, Version 2.0 (the "License");
525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * you may not use this file except in compliance with the License.
625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * You may obtain a copy of the License at
725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *      http://www.apache.org/licenses/LICENSE-2.0
925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams *
1025430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * Unless required by applicable law or agreed to in writing, software
1125430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * distributed under the License is distributed on an "AS IS" BASIS,
1225430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1325430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * See the License for the specific language governing permissions and
1425430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams * limitations under the License.
1525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams */
1625430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
1725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Samspackage android.renderscript;
1825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
199c9ad3f8c218954e46aab81f9af7834cea5675caStephen Hines/**
206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Vector version of the basic long type.
216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye * Provides two long fields packed.
226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye */
23a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Samspublic class Long2 {
246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long x;
256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long y;
266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
27a70f416c9cf2fc6cc5e132c1d656ce07441d6b82Jason Sams    public Long2() {
2825430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams    }
2925430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide */
316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public Long2(long i) {
326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = this.y = i;
336cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams    }
346cc888e77e17ac522f75bf61403307de8ace2ef3Jason Sams
356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public Long2(long x, long y) {
366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = x;
376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = y;
386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide */
416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public Long2(Long2 source) {
426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = source.x;
436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = source.y;
446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void add(Long2 a) {
526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x += a.x;
536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y += a.y;
546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 add(Long2 a, Long2 b) {
646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x + b.x;
666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y + b.y;
676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void add(long value) {
776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x += value;
786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y += value;
796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add
836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 add(Long2 a, long b) {
896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x + b;
916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y + b;
926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void sub(Long2 a) {
1026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x -= a.x;
1036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y -= a.y;
1046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
10525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
1066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 sub(Long2 a, Long2 b) {
1146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
1156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x - b.x;
1166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y - b.y;
11725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
1186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
1196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void sub(long value) {
1276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x -= value;
1286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y -= value;
1296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector subtraction
1336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 sub(Long2 a, long b) {
1396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
1406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x - b;
1416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y - b;
1426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
1446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mul(Long2 a) {
1526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x *= a.x;
1536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y *= a.y;
1546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 mul(Long2 a, Long2 b) {
1646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
1656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x * b.x;
1666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y * b.y;
1676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
1696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
1756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mul(long value) {
1776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x *= value;
1786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y *= value;
1796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector multiplication
1836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
1856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
1866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
1876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
1886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 mul(Long2 a, long b) {
1896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
1906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x * b;
1916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y * b;
1926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
1946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
1956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
1966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
1976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
1986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
1996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void div(Long2 a) {
2026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x /= a.x;
2036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y /= a.y;
2046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
20525430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
2066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 div(Long2 a, Long2 b) {
2146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
2156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x / b.x;
2166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y / b.y;
21725430d0734d12d12ca2d2d7a9d18c0cf3c5bdc4eJason Sams
2186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
2196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
2256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void div(long value) {
2276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x /= value;
2286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y /= value;
2296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector division
2336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 div(Long2 a, long b) {
2396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
2406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x / b;
2416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y / b;
2426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
2446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector Modulo
2486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mod(Long2 a) {
2526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x %= a.x;
2536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y %= a.y;
2546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector Modulo
2586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 mod(Long2 a, Long2 b) {
2646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
2656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x % b.x;
2666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y % b.y;
2676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
2696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector Modulo
2736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
2756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void mod(long value) {
2776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x %= value;
2786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y %= value;
2796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector Modulo
2836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
2856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
2866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
2876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
2886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static Long2 mod(Long2 a, long b) {
2896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        Long2 result = new Long2();
2906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.x = a.x % b;
2916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        result.y = a.y % b;
2926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return result;
2946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
2956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
2966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
2976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * get vector length
2986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
2996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long length() {
3026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return 2;
3036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * set vector negate
3076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void negate() {
3096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = -x;
3106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = -y;
3116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector dot Product
3156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
3176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long dotProduct(Long2 a) {
3206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return (long)((x * a.x) + (y * a.y));
3216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector dot Product
3256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
3276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
3286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public static long dotProduct(Long2 a, Long2 b) {
3316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return (long)((b.x * a.x) + (b.y * a.y));
3326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * Vector add Multiple
3366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
3386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param factor
3396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void addMultiple(Long2 a, long factor) {
3416a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        x += a.x * factor;
3426a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        y += a.y * factor;
3436a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3446a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3456a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3466a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * set vector value by Long2
3476a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3486a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
3496a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3506a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void set(Long2 a) {
3516a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = a.x;
3526a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = a.y;
3536a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3546a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3556a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3566a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * set the vector field value by Long
3576a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3586a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param a
3596a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param b
3606a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3616a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void setValues(long a, long b) {
3626a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.x = a;
3636a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        this.y = b;
3646a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3656a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3666a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3676a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * return the element sum of vector
3686a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3696a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3706a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3716a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long elementSum() {
3726a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        return (long)(x + y);
3736a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3746a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3756a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3766a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * get the vector field value by index
3776a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3786a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
3796a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @return
3806a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3816a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public long get(int i) {
3826a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
3836a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
3846a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return (long)(x);
3856a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
3866a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return (long)(y);
3876a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
3886a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
3896a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
3906a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
3916a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
3926a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
3936a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * set the vector field value by index
3946a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
3956a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
3966a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
3976a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
3986a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void setAt(int i, long value) {
3996a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
4006a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
4016a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            x = value;
4026a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
4036a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
4046a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            y = value;
4056a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
4066a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
4076a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
4086a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
4096a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
4106a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
4116a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
4126a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * add the vector field value by index
4136a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
4146a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param i
4156a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param value
4166a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
4176a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void addAt(int i, long value) {
4186a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        switch (i) {
4196a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 0:
4206a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            x += value;
4216a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
4226a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        case 1:
4236a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            y += value;
4246a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            return;
4256a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        default:
4266a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye            throw new IndexOutOfBoundsException("Index: i");
4276a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        }
4286a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
4296a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye
4306a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    /** @hide
4316a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * copy the vector to long array
4326a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     *
4336a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param data
4346a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     * @param offset
4356a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye     */
4366a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    public void copyTo(long[] data, int offset) {
4376a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        data[offset] = (long)(x);
4386a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye        data[offset + 1] = (long)(y);
4396a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye    }
4406a5875cf96a6eebf4ef2e176176868ecbf17122fMatthieu Delahaye}
441