/* * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * * * * * * * * * * * */ package com.sun.webkit; public final class SharedBuffer { private long nativePointer; SharedBuffer() { this.nativePointer = twkCreate(); } private SharedBuffer(long nativePointer) { if (nativePointer == 0) { throw new IllegalArgumentException("nativePointer is 0"); } this.nativePointer = nativePointer; } private static SharedBuffer fwkCreate(long nativePointer) { return new SharedBuffer(nativePointer); } long size() { if (nativePointer == 0) { throw new IllegalStateException("nativePointer is 0"); } return twkSize(nativePointer); } int getSomeData(long position, byte[] buffer, int offset, int length) { if (nativePointer == 0) { throw new IllegalStateException("nativePointer is 0"); } if (position < 0) { throw new IndexOutOfBoundsException("position is negative"); } if (position > size()) { throw new IndexOutOfBoundsException( "position is greater than size"); } if (buffer == null) { throw new NullPointerException("buffer is null"); } if (offset < 0) { throw new IndexOutOfBoundsException("offset is negative"); } if (length < 0) { throw new IndexOutOfBoundsException("length is negative"); } if (length > buffer.length - offset) { throw new IndexOutOfBoundsException( "length is greater than buffer.length - offset"); } return twkGetSomeData(nativePointer, position, buffer, offset, length); } void append(byte[] buffer, int offset, int length) { if (nativePointer == 0) { throw new IllegalStateException("nativePointer is 0"); } if (buffer == null) { throw new NullPointerException("buffer is null"); } if (offset < 0) { throw new IndexOutOfBoundsException("offset is negative"); } if (length < 0) { throw new IndexOutOfBoundsException("length is negative"); } if (length > buffer.length - offset) { throw new IndexOutOfBoundsException( "length is greater than buffer.length - offset"); } twkAppend(nativePointer, buffer, offset, length); } void dispose() { if (nativePointer == 0) { throw new IllegalStateException("nativePointer is 0"); } twkDispose(nativePointer); nativePointer = 0; } private static native long twkCreate(); private static native long twkSize(long nativePointer); private static native int twkGetSomeData(long nativePointer, long position, byte[] buffer, int offset, int length); private static native void twkAppend(long nativePointer, byte[] buffer, int offset, int length); private static native void twkDispose(long nativePointer); }