001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: /**
018: * @author Sergey V. Kuksenko
019: * @version $Revision$
020: */package org.apache.harmony.awt.nativebridge;
021:
022: /**
023: * This class represents pointer to memory for working with native functions.
024: * It is an analogue of <it>char*</it> C type. Every pointed object can be direct
025: * native object or Java object. In both cases NativeBridge provides correct
026: * passing addresses to native functions, native address is passed as is, Java
027: * object will be implicitly locked and address of lock will be passed to native.
028: * NULL pointer can't be wrapped by this object, NULL is represents by Java
029: * null value.
030: */
031: public class Int8Pointer extends VoidPointer {
032:
033: Int8Pointer(int size, boolean direct) {
034: super (size, direct);
035: }
036:
037: Int8Pointer(byte[] arr, int offset, int size) {
038: super (arr, offset, size);
039: }
040:
041: Int8Pointer(long addr) {
042: super (addr);
043: }
044:
045: Int8Pointer(VoidPointer p) {
046: super (p);
047: }
048:
049: Int8Pointer(ByteBase base) {
050: super (base);
051: }
052:
053: @Override
054: public int size() {
055: return byteBase.size();
056: }
057:
058: /**
059: * Returns class that represents the pointer to specified index.
060: * @param index - index from which pointer is returned
061: * @throws IndexOutOfBoundsException if index is out of range
062: */
063: public Int8Pointer getElementPointer(int index) {
064: return new Int8Pointer(byteBase.getBytesBaseElementPointer(
065: index, 1));
066: }
067:
068: /**
069: * Returns the element at the specified position.
070: * @throws IndexOutOfBoundsException if index is out of range
071: */
072: public byte get(int index) {
073: return byteBase.get(index);
074: }
075:
076: /**
077: * This method transfers bytes into the given destination array.
078: *
079: * @param dst - The array into which bytes are to be written
080: * @param from - Initial offset in the destination array.
081: * Must be non-negative and no larger than dst.length
082: * @param length - The maximum number of bytes to be written to the given array;
083: * must be non-negative and no larger than dst.length - from
084: *
085: * @throws IndexOutOfBoundsException if from < 0 || from > dst.length
086: * @throws IndexOutOfBoundsException if length < 0 || length > dst.length - from
087: * @throws IndexOutOfBoundsException if length > this.size()
088: */
089: public void get(byte[] dst, int from, int length) {
090: byteBase.get(dst, from, length);
091: }
092:
093: /**
094: * This method transfers bytes from the given destination array.
095: *
096: * @param src - The array from which bytes are to be read
097: * @param offset - The offset within the array of the first byte to be read;
098: * must be non-negative and no larger than dst.length
099: * @param length - The maximum number of bytes to be read from the given array;
100: * must be non-negative and no larger than array.length - offset
101: *
102: * @throws IndexOutOfBoundsException if from < 0 || from > src.length
103: * @throws IndexOutOfBoundsException if length < 0 || length > src.length - from
104: * @throws IndexOutOfBoundsException if length > this.size()
105: */
106: public void set(byte[] src, int offset, int length) {
107: byteBase.set(src, offset, length);
108: }
109:
110: /**
111: * Sets the element at the specified position.
112: *
113: * @throws IndexOutOfBoundsException if index is out of range
114: */
115: public void set(int index, byte value) {
116: byteBase.set(index, value);
117: }
118:
119: public void fill(byte value, int size) {
120: byteBase.fill(value, size);
121: }
122:
123: /**
124: * Creates String from 0 terminated modified UTF8 string.
125: */
126: public String getStringUTF() {
127: return byteBase.getStringUTF();
128: }
129:
130: /**
131: * Creates String from 0 terminated modified UTF8 native string of max
132: * strlen length in bytes.
133: */
134: public String getStringUTF(long strlen) {
135: return byteBase.getStringUTF(strlen);
136: }
137:
138: /**
139: * Convert String to 0 terminated UTF8 (Unicode) string.
140: * And set it to buffer
141: */
142: public void setStringUTF(String str) {
143: byteBase.setStringUTF(str);
144: }
145: }
|