1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.nio;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20a1603838fe9e865575c87982e32c6343740e464cElliott Hughesimport java.util.Arrays;
21a1603838fe9e865575c87982e32c6343740e464cElliott Hughes
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A buffer of shorts.
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * A short buffer can be created in either of the following ways:
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <ul>
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #allocate(int) Allocate} a new short array and create a buffer
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * based on it;</li>
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>{@link #wrap(short[]) Wrap} an existing short array to create a new
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * buffer;</li>
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <li>Use {@link java.nio.ByteBuffer#asShortBuffer() ByteBuffer.asShortBuffer}
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to create a short buffer based on a byte buffer.</li>
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </ul>
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
35eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilsonpublic abstract class ShortBuffer extends Buffer implements
36eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson        Comparable<ShortBuffer> {
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a short buffer based on a newly allocated short array.
40f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param capacity
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the capacity of the new buffer.
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created short buffer.
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @throws IllegalArgumentException
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *             if {@code capacity} is less than zero.
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static ShortBuffer allocate(int capacity) {
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (capacity < 0) {
49126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes            throw new IllegalArgumentException("capacity < 0: " + capacity);
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
51fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        return new ShortArrayBuffer(new short[capacity]);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new short buffer by wrapping the given short array.
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code wrap(array, 0, array.length)}.
59eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short array which the new buffer will be based on.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created short buffer.
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static ShortBuffer wrap(short[] array) {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return wrap(array, 0, array.length);
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Creates a new short buffer by wrapping the given short array.
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be {@code start}, limit will be
720e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * {@code start + shortCount}, capacity will be the length of the array.
73eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param array
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short array which the new buffer will be based on.
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param start
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the start index, must not be negative and not greater than
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length}.
790e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param shortCount
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the length, must not be negative and not greater than
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            {@code array.length - start}.
82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the created short buffer.
8338f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IndexOutOfBoundsException
840e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code start} or {@code shortCount} is invalid.
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
860e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public static ShortBuffer wrap(short[] array, int start, int shortCount) {
87a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(array.length, start, shortCount);
88fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        ShortBuffer buf = new ShortArrayBuffer(array);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        buf.position = start;
900e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        buf.limit = start + shortCount;
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return buf;
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
942589e301d1fb85960045c9ef29682d7e73b1aee7Narayan Kamath    ShortBuffer(int capacity, long effectiveDirectAddress) {
952589e301d1fb85960045c9ef29682d7e73b1aee7Narayan Kamath        super(1, capacity, effectiveDirectAddress);
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final short[] array() {
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArray();
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final int arrayOffset() {
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedArrayOffset();
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a read-only buffer that shares its content with this buffer.
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The returned buffer is guaranteed to be a new instance, even if this
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is read-only itself. The new buffer's position, limit, capacity
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and mark are the same as this buffer's.
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means this
114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's change of content will be visible to the new buffer. The two
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's position, limit and mark are independent.
116eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a read-only version of this buffer.
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer asReadOnlyBuffer();
120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compacts this short buffer.
123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The remaining shorts will be moved to the head of the buffer, starting
125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * from position zero. Then the position is set to {@code remaining()}; the
126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * limit is set to capacity; the mark is cleared.
127eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
12938f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer compact();
133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Compare the remaining shorts of this buffer to another short buffer's
136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * remaining shorts.
137f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param otherBuffer
139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            another short buffer.
140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a negative value if this is less than {@code otherBuffer}; 0 if
141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         this equals to {@code otherBuffer}; a positive value if this is
142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         greater than {@code otherBuffer}.
14338f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ClassCastException
144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code otherBuffer} is not a short buffer.
145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int compareTo(ShortBuffer otherBuffer) {
147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int compareRemaining = (remaining() < otherBuffer.remaining()) ? remaining()
148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                : otherBuffer.remaining();
149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int thisPos = position;
150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPos = otherBuffer.position;
151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        short thisByte, otherByte;
152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (compareRemaining > 0) {
153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisByte = get(thisPos);
154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherByte = otherBuffer.get(otherPos);
155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (thisByte != otherByte) {
156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return thisByte < otherByte ? -1 : 1;
157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            thisPos++;
159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            otherPos++;
160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            compareRemaining--;
161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return remaining() - otherBuffer.remaining();
163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a duplicated buffer that shares its content with this buffer.
167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The duplicated buffer's position, limit, capacity and mark are the same
169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * as this buffer. The duplicated buffer's read-only property and byte order
170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * are the same as this buffer's.
171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
1731c298efc60083a2ce5bdbf3febb942f5ce4c621dElliott Hughes     * buffer's change of content will be visible to the other. The two buffers'
174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer duplicate();
177adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Checks whether this short buffer is equal to another object.
180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If {@code other} is not a short buffer then {@code false} is returned.
182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Two short buffers are equal if and only if their remaining shorts are
183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * exactly the same. Position, limit, capacity and mark are not considered.
184eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param other
186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the object to compare with this short buffer.
187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this short buffer is equal to {@code other},
188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         {@code false} otherwise.
189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
190eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public boolean equals(Object other) {
192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (!(other instanceof ShortBuffer)) {
193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        ShortBuffer otherBuffer = (ShortBuffer) other;
196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (remaining() != otherBuffer.remaining()) {
198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            return false;
199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int otherPosition = otherBuffer.position;
203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        boolean equalSoFar = true;
204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (equalSoFar && (myPosition < limit)) {
205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            equalSoFar = get(myPosition++) == otherBuffer.get(otherPosition++);
206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return equalSoFar;
209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the short at the current position and increases the position by
213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * 1.
214f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the short at the current position.
21638f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferUnderflowException
217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if the position is equal or greater than limit.
218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract short get();
220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads shorts from the current position into the specified short array and
223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of shorts read.
224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
226ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * {@code get(dst, 0, dst.length)}.
227eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
228ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the destination short array.
230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
23138f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferUnderflowException
232ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *                if {@code dst.length} is greater than {@code remaining()}.
233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
234ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes    public ShortBuffer get(short[] dst) {
235ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes        return get(dst, 0, dst.length);
236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Reads shorts from the current position into the specified short array,
240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * starting from the specified offset, and increases the position by the
241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of shorts read.
242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
243ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     * @param dst
244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the target short array.
2450e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param dstOffset
246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of the short array, must not be negative and not
247ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes     *            greater than {@code dst.length}.
2480e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param shortCount
249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of shorts to read, must be no less than zero and
2500e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            not greater than {@code dst.length - dstOffset}.
251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
25238f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IndexOutOfBoundsException
2530e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code dstOffset} or {@code shortCount} is invalid.
25438f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferUnderflowException
2550e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code shortCount} is greater than {@code remaining()}.
256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
2570e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public ShortBuffer get(short[] dst, int dstOffset, int shortCount) {
258a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(dst.length, dstOffset, shortCount);
2590e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (shortCount > remaining()) {
260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferUnderflowException();
261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
2620e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = dstOffset; i < dstOffset + shortCount; ++i) {
263ccbe3404e0691dab506d017550658e8e5974c83eElliott Hughes            dst[i] = get();
264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the short at the specified index; the position is not changed.
270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than limit.
273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return a short at the specified index.
27438f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IndexOutOfBoundsException
275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract short get(int index);
278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final boolean hasArray() {
280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return protectedHasArray();
281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calculates this buffer's hash code from the remaining chars. The
285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit, capacity and mark don't affect the hash code.
286eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the hash code calculated from the remaining shorts.
288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
289eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson    @Override
290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public int hashCode() {
291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int myPosition = position;
292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        int hash = 0;
293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        while (myPosition < limit) {
294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            hash = hash + get(myPosition++);
295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return hash;
297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Indicates whether this buffer is direct. A direct buffer will try its
301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * best to take advantage of native memory APIs and it may not stay in the
302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Java heap, so it is not affected by garbage collection.
303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * A short buffer is direct if it is based on a byte buffer and the byte
305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer is direct.
306eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return {@code true} if this buffer is direct, {@code false} otherwise.
308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract boolean isDirect();
310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns the byte order used by this buffer when converting shorts from/to
313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * bytes.
314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * If this buffer is not based on a byte buffer, then always return the
316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * platform's native byte order.
317eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the byte order used by this buffer when converting shorts from/to
319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *         bytes.
320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ByteOrder order();
322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code array()}.
325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code array()}
327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract short[] protectedArray();
329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code arrayOffset()}.
332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code arrayOffset()}
334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract int protectedArrayOffset();
336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Child class implements this method to realize {@code hasArray()}.
339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *
340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return see {@code hasArray()}
341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    abstract boolean protectedHasArray();
343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes the given short to the current position and increases the position
346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * by 1.
347f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param s
349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short to write.
350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
35138f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferOverflowException
352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if position is equal or greater than limit.
35338f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer put(short s);
357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes shorts from the given short array to the current position and
360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * increases the position by the number of shorts written.
361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Calling this method has the same effect as
363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * {@code put(src, 0, src.length)}.
364eaa2ff09069424b0f7a95c7cd831cef1b744fe67Jesse Wilson     *
365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source short array.
367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
36838f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferOverflowException
369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code remaining()} is less than {@code src.length}.
37038f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public final ShortBuffer put(short[] src) {
374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return put(src, 0, src.length);
375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes shorts from the given short array, starting from the specified
379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * offset, to the current position and increases the position by the number
380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * of shorts written.
381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source short array.
3840e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param srcOffset
385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the offset of short array, must not be negative and not
386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            greater than {@code src.length}.
3870e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     * @param shortCount
388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the number of shorts to write, must be no less than zero and
3890e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *            not greater than {@code src.length - srcOffset}.
390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
39138f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferOverflowException
3920e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if {@code remaining()} is less than {@code shortCount}.
39338f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IndexOutOfBoundsException
3940e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes     *                if either {@code srcOffset} or {@code shortCount} is invalid.
39538f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
3980e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes    public ShortBuffer put(short[] src, int srcOffset, int shortCount) {
399a1603838fe9e865575c87982e32c6343740e464cElliott Hughes        Arrays.checkOffsetAndCount(src.length, srcOffset, shortCount);
4000e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        if (shortCount > remaining()) {
401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
4030e1b748ecabf720065a632f28330f5d4d037d5aeElliott Hughes        for (int i = srcOffset; i < srcOffset + shortCount; ++i) {
404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            put(src[i]);
405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes all the remaining shorts of the {@code src} short buffer to this
411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * buffer's current position, and increases both buffers' position by the
412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * number of shorts copied.
413f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param src
415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the source short buffer.
416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
41738f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws BufferOverflowException
418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src.remaining()} is greater than this buffer's
419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                {@code remaining()}.
42038f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IllegalArgumentException
421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if {@code src} is this buffer.
42238f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public ShortBuffer put(ShortBuffer src) {
426fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        if (isReadOnly()) {
427fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes            throw new ReadOnlyBufferException();
428fe5da19e0e366286cd4d95f7628fe9442b9062c8Elliott Hughes        }
429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src == this) {
430126ab1b546c71137a97cef68cc89267e7f7be634Elliott Hughes            throw new IllegalArgumentException("src == this");
431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (src.remaining() > remaining()) {
433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            throw new BufferOverflowException();
434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        short[] contents = new short[src.remaining()];
436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        src.get(contents);
437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        put(contents);
438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return this;
439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Writes a short to the specified index of this buffer; the position is not
443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * changed.
444f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param index
446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the index, must not be negative and less than the limit.
447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param s
448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the short to write.
449adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return this buffer.
45038f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws IndexOutOfBoundsException
451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if index is invalid.
45238f3983aed5a093c17d1f68c1517bbc72c2862eaElliott Hughes     * @throws ReadOnlyBufferException
453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *                if no changes may be made to the contents of this buffer.
454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer put(int index, short s);
456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Returns a sliced buffer that shares its content with this buffer.
459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The sliced buffer's capacity will be this buffer's {@code remaining()},
461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * and its zero position will correspond to this buffer's current position.
462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer's position will be 0, limit will be its capacity, and its
463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * mark is cleared. The new buffer's read-only property and byte order are
464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * same as this buffer's.
465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * <p>
466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The new buffer shares its content with this buffer, which means either
4671c298efc60083a2ce5bdbf3febb942f5ce4c621dElliott Hughes     * buffer's change of content will be visible to the other. The two buffers'
468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * position, limit and mark are independent.
469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public abstract ShortBuffer slice();
471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
472