/******************************************************************************* * Copyright (c) 2002 - 2006 IBM Corporation. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.wala.util.strings; /** * A read-only byte array. */ public final class ImmutableByteArray { // allow "friends" in this package to access final byte[] b; public ImmutableByteArray(byte[] b) { if (b == null) { throw new IllegalArgumentException("b is null"); } this.b = b; } public ImmutableByteArray(byte[] b, int start, int length) { if (b == null) { throw new IllegalArgumentException("b is null"); } if (start < 0) { throw new IllegalArgumentException("invalid start: " + start); } if (length < 0) { throw new IllegalArgumentException("null length"); } this.b = new byte[length]; try { System.arraycopy(b, start, this.b, 0, length); } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("illegal parameters " + b.length + " " + start + " " + length); } } public int length() { return b.length; } public byte get(int i) throws IllegalArgumentException { if (i < 0 || i >= b.length) { throw new IllegalArgumentException("index out of bounds " + b.length + " " + i); } return b[i]; } public byte[] substring(int i, int length) { if (length < 0) { throw new IllegalArgumentException("illegal length: " + length); } if (i < 0) { throw new IllegalArgumentException("illegal i: " + i); } byte[] result = new byte[length]; try { System.arraycopy(b, i, result, 0, length); } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Invalid combination: " + i + " " + length); } return result; } public static ImmutableByteArray concat(byte b, ImmutableByteArray b1) { if (b1 == null) { throw new IllegalArgumentException("b1 is null"); } byte[] arr = new byte[b1.length() + 1]; arr[0] = b; System.arraycopy(b1.b, 0, arr, 1, b1.b.length); return new ImmutableByteArray(arr); } @Override public String toString() { return new String(b); } public static ImmutableByteArray make(String s) { return new ImmutableByteArray(UTF8Convert.toUTF8(s)); } }