/* * Copyright (c) 2007-2008 Matthew Hall and others. * 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: * Matthew Hall - initial API and implementation */ package org.eclipse.nebula.paperclips.core.internal.util; import java.util.Iterator; import java.util.List; import org.eclipse.nebula.paperclips.core.PrintPiece; /** * Convenience methods specific to PaperClips * * @author Matthew Hall */ public class PaperClipsUtil { private PaperClipsUtil() { } // no instances /** * Disposes the print piece if not null. * * @param piece * the print piece to dispose. */ public static void dispose(final PrintPiece piece) { if (piece != null) piece.dispose(); } /** * Disposes the arguments that are not null. * * @param p1 * print piece to dispose * @param p2 * print piece to dispose */ public static void dispose(PrintPiece p1, PrintPiece p2) { dispose(p1); dispose(p2); } /** * Disposes the print pieces that are not null. * * @param pieces * array of print pieces to dispose. */ public static void dispose(final PrintPiece[] pieces) { if (pieces != null) for (int i = 0; i < pieces.length; i++) dispose(pieces[i]); } /** * Disposes the print pieces in the array from start (inclusive) to end * (exclusive). * * @param pages * array of print pieces to dispose. * @param start * the start index. * @param end * the end index. */ public static void dispose(PrintPiece[] pages, int start, int end) { for (int i = start; i < end; i++) pages[i].dispose(); } /** * Disposes the print pieces in the list. * * @param pages * list of print pieces to dispose. */ public static void dispose(List pages) { for (Iterator it = pages.iterator(); it.hasNext();) ((PrintPiece) it.next()).dispose(); pages.clear(); } /** * Disposes the print pieces that are not null. * * @param piece * a print piece to dispose * @param pieces * array of print pieces to dispose */ public static void dispose(PrintPiece piece, final PrintPiece[] pieces) { dispose(piece); dispose(pieces); } /** * Returns a copy of the array. * * @param array * the array to copy * @return a copy of the array. */ public static int[] copy(int[] array) { Util.notNull(array); return (int[]) array.clone(); } /** * Returns a deep copy of the array. * * @param array * the array to copy * @return a copy of the array. */ public static int[][] copy(int[][] array) { Util.notNull(array); int[][] result = (int[][]) array.clone(); for (int i = 0; i < result.length; i++) result[i] = copy(result[i]); return result; } /** * Returns the sum of all elements in the array. * * @param array * the array * @return the sum of all elements in the array. */ public static int sum(int[] array) { return PaperClipsUtil.sum(array, 0, array.length); } /** * Returns the sum of all elements in the array in the range * <code>[start, start+count)</code>. * * @param array * the array containing the elements to add up. * @param start * the index of the first element to add. * @param count * the number of elements to add. * @return the sum of all elements in the array in the specified range. */ public static int sum(final int[] array, final int start, final int count) { Util.notNull(array); int result = 0; final int end = start + count; for (int i = start; i < end; i++) result += array[i]; return result; } /** * Returns the sum of all elements in the array at the given indices. * * @param array * the array of elements to add up. * @param indices * the indices of the elements in the array to add up. * @return the sum of all elements in the array at the given indices. */ public static int sumByIndex(final int[] array, final int[] indices) { Util.notNull(array); int result = 0; for (int i = 0; i < indices.length; i++) result += array[indices[i]]; return result; } /** * Converts the argument to an int[] array. * * @param list * a List of Integers. * @return a primitive int[] array. */ public static int[] toIntArray(List list) { final int[] array = new int[list.size()]; for (int i = 0; i < array.length; i++) array[i] = ((Integer) list.get(i)).intValue(); return array; } /** * Converts the argument to an int[][] array. * * @param list * a List of int[] arrays. * @return a primitive int[][] array. */ public static int[][] toIntIntArray(List list) { final int[][] array = new int[list.size()][]; for (int i = 0; i < array.length; i++) array[i] = (int[]) list.get(i); return array; } /** * Returns the first element in masks where (value & mask[index]) == * mask[index]. * * @param value * the value to match * @param masks * the possible values. * @param defaultMask * the value to return if no match is found. * @return the first value in possibleValues which is a bitwise match to * value, or 0 if none is found. */ public static int firstMatch(int value, int[] masks, int defaultMask) { Util.notNull(masks); for (int i = 0; i < masks.length; i++) { int mask = masks[i]; if ((value & mask) == mask) return mask; } return defaultMask; } }