46158e80480e1178c652b06a0d0019372d1c5cd8
[jpf-core.git] / src / classes / java / nio / Buffer.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18 package java.nio;
19
20 public abstract class Buffer {
21
22         protected int position;
23         protected int capacity;
24         protected int limit;
25         protected int mark = -1;
26
27
28         // Todo: There exists other missing methods in this class
29         // which may throw NoSuchMethodException errors to users
30         // For example checkBounds has yet to be implemented
31         Buffer(int mark, int pos, int lim, int cap) {
32                 if (cap < 0)
33                         throw new IllegalArgumentException("Negative capacity: " + cap);
34                 this.capacity = cap;
35                 limit(lim);
36                 position(pos);
37                 if (mark >= 0 && mark <= pos){
38                         this.mark = mark;
39                 }
40         }
41
42         public final int capacity() {
43                 return capacity;
44         }
45
46         public final Buffer position(int newPosition) {
47                 if ((newPosition<0)||(newPosition>limit)) {
48                         throw new IllegalArgumentException("Illegal buffer position exception: "+newPosition);
49                 }
50                 this.position = newPosition;
51                 return this;
52         }
53
54         public final int position() {
55                 return position;
56         }
57
58         public final int limit() {
59                 return this.limit;
60         }
61
62         public final Buffer limit(int newLimit) {
63                 if ((newLimit<0)||(newLimit>capacity)) {
64                         throw new IllegalArgumentException("Illegal buffer limit exception: "+newLimit);
65                 }
66                 this.limit = newLimit;
67                 return this;
68         }
69
70         public final Buffer clear(){
71                 position = 0;
72                 limit = capacity;
73                 mark = -1;
74                 return this;
75         }
76
77         public final Buffer flip() {
78                 limit = position;
79                 position = 0;
80                 return this;
81         }
82
83         public final Buffer rewind() {
84                 position = 0;
85                 return this;
86         }
87
88         public final int remaining() {
89                 return limit-position;
90         }
91
92         public final boolean hasRemaining() {
93                 return remaining()>0;
94         }
95
96         public abstract boolean hasArray();
97
98         public abstract Object array();
99 }