/* 
 * Copyright (c) 2003 - 2007 OpenSubsystems s.r.o. Slovak Republic. All rights reserved. 
 *  
 * Project: OpenSubsystems 
 *  
 * $Id: ArrayUtils.java,v 1.9 2007/01/23 06:00:30 bastafidli Exp $ 
 *  
 * This program is free software; you can redistribute it and/or modify 
 * it under the terms of the GNU General Public License as published by 
 * the Free Software Foundation; version 2 of the License.  
 *  
 * This program is distributed in the hope that it will be useful, 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 * GNU General Public License for more details. 
 *  
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  
 */ 
 
 
/** 
 * Collection of useful utilities to work with arrays.  
 *  
 * @version $Id: ArrayUtils.java,v 1.9 2007/01/23 06:00:30 bastafidli Exp $ 
 * @author Peter Satury 
 * @code.reviewer Miro Halas 
 * @code.reviewed 1.5 2005/07/29 07:36:24 bastafidli 
 */ 
public final class ArrayUtils 
{ 
   /**  
    * Private constructor since this class cannot be instantiated 
    */ 
   private ArrayUtils( 
   ) 
   { 
      // Do nothing 
   } 
    
   // Public methods /////////////////////////////////////////////////////////// 
 
   /** 
    * Method to exclude 2 arrays of ints so that the result contains all elements 
    * from the first array, which are not in the second array. 
    *   
    * @param arrBase - base array to exclude from  
    * @param arrExclude - array to exclude from the first one 
    * @return int[] - array which contains all elements from the first array  
    *                 which are not in the second array or null 
    */ 
   public static int[] exclude( 
      int[] arrBase,  
      int[] arrExclude 
   ) 
   { 
      int[] arrReturn = null; 
 
      if ((arrBase != null) && (arrBase.length > 0) && (arrExclude != null) 
         && (arrExclude.length > 0)) 
      { 
         int[] arrHelp; 
         int   iCount1; 
         int   iHelp; 
         int   iLength = 0; 
          
         arrHelp = new int[arrBase.length]; 
         for (iCount1 = 0; iCount1 < arrBase.length; iCount1++) 
         { 
            iHelp = arrBase[iCount1]; 
            if (ArrayUtils.contains(arrExclude, iHelp) == -1) 
            { 
               // If the element is not part of the second array then it should 
               // be included in the result 
               arrHelp[iLength++] = iHelp; 
            } 
         } 
          
         // Shrink the array 
         // TODO: Performance: Replace this with System.arraycopy 
         arrReturn = new int[iLength]; 
         for (int iCount = 0; iCount < iLength; iCount++) 
         { 
            arrReturn[iCount] = arrHelp[iCount]; 
         } 
      } 
      else 
      { 
         arrReturn = arrBase; 
      } 
       
      return arrReturn; 
   } 
    
   /** 
    * Test if specified array contains given element and if it does, find  
    * its position. 
    *  
    * @param source - array to search, can be null 
    * @param iTarget - element to find 
    * @return int - -1 if it doesn't exist there otherwise its position 
    */ 
   public static int contains( 
      int[] source, 
      int   iTarget 
   ) 
   { 
      int iReturn = -1; 
       
      if ((source != null) && (source.length > 0)) 
      {    
         int iIndex; 
          
         for (iIndex = 0; iIndex < source.length; iIndex++) 
         { 
            if (source[iIndex] == iTarget) 
            { 
               iReturn = iIndex; 
               break; 
            } 
         } 
      } 
       
      return iReturn; 
   } 
 
   /** 
    * Sum all elements in the array. 
    *  
    * @param source - array to sum elements of 
    * @return long - sum of the elements in the array 
    */ 
   public static long sum( 
      int[] source 
   ) 
   { 
      int iReturn = 0; 
       
      if ((source != null) && (source.length > 0)) 
      {    
         int iIndex; 
          
         for (iIndex = 0; iIndex < source.length; iIndex++) 
         { 
            iReturn += source[iIndex]; 
         } 
      } 
       
      return iReturn; 
   } 
} 
 
    
     
     
     
  
  |