001/* 002 * $RCSfile: ArrayUtil.java,v $ 003 * $Revision: 1.1 $ 004 * $Date: 2005/02/11 05:02:24 $ 005 * $State: Exp $ 006 * 007 * Class: ArrayUtil 008 * 009 * Description: Utillities for arrays. 010 * 011 * 012 * 013 * COPYRIGHT: 014 * 015 * This software module was originally developed by Raphaël Grosbois and 016 * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel 017 * Askelöf (Ericsson Radio Systems AB); and Bertrand Berthelot, David 018 * Bouchard, Félix Henry, Gerard Mozelle and Patrice Onno (Canon Research 019 * Centre France S.A) in the course of development of the JPEG2000 020 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This 021 * software module is an implementation of a part of the JPEG 2000 022 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio 023 * Systems AB and Canon Research Centre France S.A (collectively JJ2000 024 * Partners) agree not to assert against ISO/IEC and users of the JPEG 025 * 2000 Standard (Users) any of their rights under the copyright, not 026 * including other intellectual property rights, for this software module 027 * with respect to the usage by ISO/IEC and Users of this software module 028 * or modifications thereof for use in hardware or software products 029 * claiming conformance to the JPEG 2000 Standard. Those intending to use 030 * this software module in hardware or software products are advised that 031 * their use may infringe existing patents. The original developers of 032 * this software module, JJ2000 Partners and ISO/IEC assume no liability 033 * for use of this software module or modifications thereof. No license 034 * or right to this software module is granted for non JPEG 2000 Standard 035 * conforming products. JJ2000 Partners have full right to use this 036 * software module for his/her own purpose, assign or donate this 037 * software module to any third party and to inhibit third parties from 038 * using this software module for non JPEG 2000 Standard conforming 039 * products. This copyright notice must be included in all copies or 040 * derivative works of this software module. 041 * 042 * Copyright (c) 1999/2000 JJ2000 Partners. 043 * 044 * 045 * 046 */ 047 048 049package jj2000.j2k.util; 050 051/** 052 * This class contains a colleaction of utility static methods for arrays. 053 * */ 054public class ArrayUtil { 055 056 /** The maximum array size to do element by element copying, larger 057 * arrays are copyied in a n optimized way. */ 058 public static final int MAX_EL_COPYING = 8; 059 060 /** The number of elements to copy initially in an optimized array copy */ 061 public static final int INIT_EL_COPYING = 4; 062 063 /** 064 * Reinitializes an int array to the given value in an optimized way. If 065 * the length of the array is less than MAX_EL_COPYING, then the array 066 * is set element by element in the normal way, otherwise the first 067 * INIT_EL_COPYING elements are set element by element and then 068 * System.arraycopy is used to set the other parts of the array. 069 * 070 * @param arr The array to set. 071 * 072 * @param val The value to set the array to. 073 * 074 * 075 * */ 076 public static void intArraySet(int arr[], int val) { 077 int i,len,len2; 078 079 len = arr.length; 080 // Set array to 'val' in an optimized way 081 if (len < MAX_EL_COPYING) { 082 // Not worth doing optimized way 083 for (i=len-1; i>=0; i--) { // Set elements 084 arr[i] = val; 085 } 086 } 087 else { // Do in optimized way 088 len2 = len>>1; 089 for (i=0; i<INIT_EL_COPYING; i++) { // Set first elements 090 arr[i] = val; 091 } 092 for (; i <= len2 ; i<<=1) { 093 // Copy values doubling size each time 094 System.arraycopy(arr,0,arr,i,i); 095 } 096 if (i < len) { // Copy values to end 097 System.arraycopy(arr,0,arr,i,len-i); 098 } 099 } 100 } 101 102 /** 103 * Reinitializes a byte array to the given value in an optimized way. If 104 * the length of the array is less than MAX_EL_COPYING, then the array 105 * is set element by element in the normal way, otherwise the first 106 * INIT_EL_COPYING elements are set element by element and then 107 * System.arraycopy is used to set the other parts of the array. 108 * 109 * @param arr The array to set. 110 * 111 * @param val The value to set the array to. 112 * 113 * 114 * */ 115 public static void byteArraySet(byte arr[], byte val) { 116 int i,len,len2; 117 118 len = arr.length; 119 // Set array to 'val' in an optimized way 120 if (len < MAX_EL_COPYING) { 121 // Not worth doing optimized way 122 for (i=len-1; i>=0; i--) { // Set elements 123 arr[i] = val; 124 } 125 } 126 else { // Do in optimized way 127 len2 = len>>1; 128 for (i=0; i<INIT_EL_COPYING; i++) { // Set first elements 129 arr[i] = val; 130 } 131 for (; i <= len2 ; i<<=1) { 132 // Copy values doubling size each time 133 System.arraycopy(arr,0,arr,i,i); 134 } 135 if (i < len) { // Copy values to end 136 System.arraycopy(arr,0,arr,i,len-i); 137 } 138 } 139 } 140 141}