1 /* MappedByteBufferImpl.java --
2    Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
3 
4 This file is part of GNU Classpath.
5 
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
10 
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING.  If not, write to the
18 Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 02111-1307 USA.
20 
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library.  Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
25 
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module.  An independent module is a module which is not derived from
33 or based on this library.  If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so.  If you do not wish to do so, delete this
36 exception statement from your version. */
37 
38 
39 package java.nio;
40 
41 import java.io.IOException;
42 import java.nio.channels.FileChannelImpl;
43 import gnu.gcj.RawData;
44 
45 public class MappedByteBufferImpl extends MappedByteBuffer
46 {
47   boolean readOnly;
48   RawData map_address;
49   public FileChannelImpl ch;
50 
MappedByteBufferImpl(FileChannelImpl ch)51   public MappedByteBufferImpl (FileChannelImpl ch) throws IOException
52   {
53     super ((int) ch.size (), (int) ch.size (), 0, -1);
54 
55     this.ch = ch;
56     map_address = ch.map_address;
57     long si = ch.size () / 1;
58     limit ((int) si);
59   }
60 
MappedByteBufferImpl(FileChannelImpl ch, int offset, int capacity, int limit, int position, int mark, boolean readOnly)61   public MappedByteBufferImpl (FileChannelImpl ch, int offset, int capacity, int limit, int position, int mark, boolean readOnly)
62   {
63     super (capacity, limit, position, mark);
64 
65     this.ch = ch;
66     this.array_offset = offset;
67     this.readOnly = readOnly;
68   }
69 
isReadOnly()70   public boolean isReadOnly ()
71   {
72     return readOnly;
73   }
74 
getImpl(FileChannelImpl ch, int index, int limit, RawData map_address)75   public static byte getImpl (FileChannelImpl ch, int index,
76 			      int limit, RawData map_address)
77   {
78     throw new Error ("Not implemented");
79   }
80 
putImpl(FileChannelImpl ch, int index, int limit, byte value, RawData map_address)81   public static void putImpl (FileChannelImpl ch, int index,
82 			      int limit, byte value, RawData map_address)
83   {
84     throw new Error ("Not implemented");
85   }
86 
get()87   public byte get ()
88   {
89     byte result = get (position());
90     position (position() + 1);
91     return result;
92   }
93 
put(byte value)94   public ByteBuffer put (byte value)
95   {
96     put (position(), value);
97     position (position() + 1);
98     return this;
99   }
100 
get(int index)101   public byte get (int index)
102   {
103     return getImpl (ch, index, limit (), map_address);
104   }
105 
put(int index, byte value)106   public ByteBuffer put (int index, byte value)
107   {
108     putImpl (ch, index, limit (), value, map_address);
109     return this;
110   }
111 
compact()112   public ByteBuffer compact ()
113   {
114     int pos = position();
115     if (pos > 0)
116       {
117 	int count = remaining();
118 	shiftDown(0, pos, count);
119 	position(count);
120 	limit(capacity());
121       }
122     return this;
123   }
124 
isDirect()125   public boolean isDirect ()
126   {
127     return true;
128   }
129 
slice()130   public ByteBuffer slice ()
131   {
132     throw new Error ("Not implemented");
133   }
134 
duplicate()135   public ByteBuffer duplicate ()
136   {
137     throw new Error ("Not implemented");
138   }
139 
asReadOnlyBuffer()140   public ByteBuffer asReadOnlyBuffer ()
141   {
142     throw new Error ("Not implemented");
143   }
144 
asCharBuffer()145   public CharBuffer asCharBuffer ()
146   {
147     return new CharViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
148   }
149 
asShortBuffer()150   public ShortBuffer asShortBuffer ()
151   {
152     return new ShortViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
153   }
154 
asIntBuffer()155   public IntBuffer asIntBuffer ()
156   {
157     return new IntViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
158   }
159 
asLongBuffer()160   public LongBuffer asLongBuffer ()
161   {
162     return new LongViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
163   }
164 
asFloatBuffer()165   public FloatBuffer asFloatBuffer ()
166   {
167     return new FloatViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
168   }
169 
asDoubleBuffer()170   public DoubleBuffer asDoubleBuffer ()
171   {
172     return new DoubleViewBufferImpl (this, position (), remaining(), remaining (), 0, -1, isReadOnly (), order());
173   }
174 
getChar()175   final public char getChar ()
176   {
177     return ByteBufferHelper.getChar(this, order());
178   }
179 
putChar(char value)180   final public ByteBuffer putChar (char value)
181   {
182     ByteBufferHelper.putChar(this, value, order());
183     return this;
184   }
185 
getChar(int index)186   final public char getChar (int index)
187   {
188     return ByteBufferHelper.getChar(this, index, order());
189   }
190 
putChar(int index, char value)191   final public ByteBuffer putChar (int index, char value)
192   {
193     ByteBufferHelper.putChar(this, index, value, order());
194     return this;
195   }
196 
getShort()197   final public short getShort ()
198   {
199     return ByteBufferHelper.getShort(this, order());
200   }
201 
putShort(short value)202   final public ByteBuffer putShort (short value)
203   {
204     ByteBufferHelper.putShort(this, value, order());
205     return this;
206   }
207 
getShort(int index)208   final public short getShort (int index)
209   {
210     return ByteBufferHelper.getShort(this, index, order());
211   }
212 
putShort(int index, short value)213   final public ByteBuffer putShort (int index, short value)
214   {
215     ByteBufferHelper.putShort(this, index, value, order());
216     return this;
217   }
218 
getInt()219   final public int getInt ()
220   {
221     return ByteBufferHelper.getInt(this, order());
222   }
223 
putInt(int value)224   final public ByteBuffer putInt (int value)
225   {
226     ByteBufferHelper.putInt(this, value, order());
227     return this;
228   }
229 
getInt(int index)230   final public int getInt (int index)
231   {
232     return ByteBufferHelper.getInt(this, index, order());
233   }
234 
putInt(int index, int value)235   final public ByteBuffer putInt (int index, int value)
236   {
237     ByteBufferHelper.putInt(this, index, value, order());
238     return this;
239   }
240 
getLong()241   final public long getLong ()
242   {
243     return ByteBufferHelper.getLong(this, order());
244   }
245 
putLong(long value)246   final public ByteBuffer putLong (long value)
247   {
248     ByteBufferHelper.putLong (this, value, order());
249     return this;
250   }
251 
getLong(int index)252   final public long getLong (int index)
253   {
254     return ByteBufferHelper.getLong (this, index, order());
255   }
256 
putLong(int index, long value)257   final public ByteBuffer putLong (int index, long value)
258   {
259     ByteBufferHelper.putLong (this, index, value, order());
260     return this;
261   }
262 
getFloat()263   final public float getFloat ()
264   {
265     return ByteBufferHelper.getFloat (this, order());
266   }
267 
putFloat(float value)268   final public ByteBuffer putFloat (float value)
269   {
270     ByteBufferHelper.putFloat (this, value, order());
271     return this;
272   }
273 
getFloat(int index)274   public final float getFloat (int index)
275   {
276     return ByteBufferHelper.getFloat (this, index, order());
277   }
278 
putFloat(int index, float value)279   final public ByteBuffer putFloat (int index, float value)
280   {
281     ByteBufferHelper.putFloat (this, index, value, order());
282     return this;
283   }
284 
getDouble()285   final public double getDouble ()
286   {
287     return ByteBufferHelper.getDouble (this, order());
288   }
289 
putDouble(double value)290   final public ByteBuffer putDouble (double value)
291   {
292     ByteBufferHelper.putDouble (this, value, order());
293     return this;
294   }
295 
getDouble(int index)296   final public double getDouble (int index)
297   {
298     return ByteBufferHelper.getDouble (this, index, order());
299   }
300 
putDouble(int index, double value)301   final public ByteBuffer putDouble (int index, double value)
302   {
303     ByteBufferHelper.putDouble (this, index, value, order());
304     return this;
305   }
306 }
307