Logo
Distributed Genetic Programming Framework
print print

File org.sfc.collections.SubList.java

Here you can find all the information about the file org.sfc.collections.SubList.java. You may explore it here or download it onto your local disk.
/*
 * Copyright (c) 2006 Thomas Weise
 * 
 * E-Mail           : tweise@gmx.de
 * Creation Date    : 2006-05-22 08:34:43
 * Original Filename: org.sfc.collections.SubList.java
 * Version          : 1.0.0
 * Last modification: 2006-05-22
 *                by: Thomas Weise
 * 
 * License          : GNU LESSER GENERAL PUBLIC LICENSE
 *                    Version 2.1, February 1999
 *                    You should have received a copy of this license along
 *                    with this library; if not, write to the Free Software
 *                    Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *                    MA 02111-1307, USA or download the license under
 *                    http://www.gnu.org/copyleft/lesser.html.
 *                    
 * Warranty         : This software is provided "as is" without any
 *                    warranty; without even the implied warranty of
 *                    merchantability or fitness for a particular purpose.
 *                    See the Gnu Lesser General Public License for more
 *                    details.
 */

 
package org.sfc.collections;

import java.util.List;

import org.sfc.utils.Typesafe;

/**
 * A sublist manages a view to a real list.
 * 
 * @param <Type>  The item type.
 * 
 * @author Thomas Weise
 */

public final  class SubList<Type>  extends     BasicList<Type>
  {
/**
 * The serial version uid.
 */

  private static final long serialVersionUID = 1;
/**
 * The internal list.
 */

  private       List<Type>  m_list  ;
/**
 * The internal offset.
 */

  private       int         m_offset  ;
/**
 * The count of items in the array.
 */

  int     m_count ;
  
/**
 * Create a new sub list.
 * @param p_list    The backing list.
 * @param p_offset  The offset into the backing list.
 * @param p_size    The size of the backing list.
 */

  public  SubList(      List<Type> p_list,
                        int        p_offset,
                        int        p_size)
    {
    super();
        
    SubList<Type> l_sl;
    
    if(p_offset < 0)
      {
      p_size  += p_offset;
      p_offset = 0;
      }
    
//TODO: If this class was changed to non-final, the following conditional
//instructions must be removed.
    if(p_list instanceof SubList)
      {
      l_sl      = Typesafe.cast(p_list);
      p_list    = l_sl.m_list;
      p_offset += l_sl.m_offset;
      }
    
    this.m_list   = p_list;    
    this.m_offset = p_offset;
    this.m_count  = ((p_size > 0) ? p_size : 0);
    }
  


  
/**
 * Returns the number of elements in this list.  If this list contains
 * more than <tt>Integer.MAX_VALUE</tt> elements, returns
 * <tt>Integer.MAX_VALUE</tt>.
 *
 * @return the number of elements in this list.
 */

  @Override
  public  final int size()
    {
    return this.m_count;
    }

/**
 * Returns <tt>true</tt> if this list contains no elements.
 *
 * @return <tt>true</tt> if this list contains no elements.
 */

  @Override
  public  final boolean isEmpty()
    {
    return (this.m_count > 0);
    }

/**
 * Returns the element at the specified position in this list.
 *
 * @param p_index index of element to return.
 * @return the element at the specified position in this list.
 * 
 * @throws IndexOutOfBoundsException if the index is out of range (index
 *      &lt; 0 || index &gt;= size()).
 */

  @Override
  public final Type get(final int p_index)
    {
    if((p_index < 0) || (p_index >= this.m_count))
      {
      throw new IndexOutOfBoundsException();
      }
    
    return this.m_list.get(this.m_offset + p_index);
    }

  
/**
 * Replaces the element at the specified position in this list with the
 * specified element (optional operation). <p>
 *
 * This implementation always throws an
 * <tt>UnsupportedOperationException</tt>.
 *
 * @param p_index index of element to replace.
 * @param p_element element to be stored at the specified position.
 * @return the element previously at the specified position.
 * 
 * @throws UnsupportedOperationException if the <tt>set</tt> method is not
 *      supported by this List.
 * @throws ClassCastException if the class of the specified element
 *      prevents it from being added to this list.
 * @throws IllegalArgumentException if some aspect of the specified
 *      element prevents it from being added to this list.
 * 
 * @throws IndexOutOfBoundsException if the specified index is out of
 *            range (<tt>index &lt; 0 || index &gt;= size()</tt>).
 */

  @Override
  public final Type set(final int   p_index,
                        final Type  p_element)
    {
    if((p_index < 0) || (p_index >= this.m_count))
      {
      throw new IndexOutOfBoundsException();
      }
    
    return this.m_list.set(p_index + this.m_offset, p_element);
    }
  
/**
 * Inserts the specified element at the specified position in this list
 * (optional operation).  Shifts the element currently at that position
 * (if any) and any subsequent elements to the right (adds one to their
 * indices).<p>
 *
 * This implementation always throws an UnsupportedOperationException.
 *
 * @param p_index index at which the specified element is to be inserted.
 * @param p_element element to be inserted.
 * 
 * @throws UnsupportedOperationException if the <tt>add</tt> method is not
 *      supported by this list.
 * @throws ClassCastException if the class of the specified element
 *      prevents it from being added to this list.
 * @throws IllegalArgumentException if some aspect of the specified
 *      element prevents it from being added to this list.
 * @throws IndexOutOfBoundsException index is out of range (<tt>index &lt;
 *      0 || index &gt; size()</tt>).
 */

  @Override
  public final  void add(      int  p_index,
                         final Type p_element)    
    {
    int l_s;
    
    l_s = this.m_count;
    
    if(p_index < 0) p_index = 0;
    else if(p_index > l_s) p_index = l_s;
    
    this.m_list.add(p_index + this.m_offset, p_element);
    this.m_count = (l_s + 1);
    }
  
/**
 * Removes the element at the specified position in this list (optional
 * operation).  Shifts any subsequent elements to the left (subtracts one
 * from their indices).  Returns the element that was removed from the
 * list.<p>
 *
 * This implementation always throws an
 * <tt>UnsupportedOperationException</tt>.
 *
 * @param p_index the index of the element to remove.
 * @return the element previously at the specified position.
 * 
 * @throws UnsupportedOperationException if the <tt>remove</tt> method is
 *      not supported by this list.
 * @throws IndexOutOfBoundsException if the specified index is out of
 *      range (<tt>index &lt; 0 || index &gt;= size()</tt>).
 */

  @Override
  public final Type remove(final int p_index)
    {
    int  l_s;
    Type l_t;
    
    l_s = this.m_count;
    if((p_index < 0) || (p_index >= l_s))
      {
      throw new IndexOutOfBoundsException();
      }
    
    l_t = this.m_list.remove(p_index + this.m_offset);
    this.m_count = (l_s - 1);
    
    return l_t;
    }

/**
 * Visit all ids in this id manager.
 * @param p_visitor The visitor to be carried around.
 * @return  <code>true</code> if the visitor successfully visited all
 *          elements, <code>false</code> if it aborted its visit.
 */

  @Override
  public  boolean  visit (final IVisitor<Type> p_visitor)
    {
    int l_s, l_i;
    
    
    l_i = this.m_offset;
    for(l_s = this.m_count; l_s > 0; l_s--, l_i++)
      {
      if(!(p_visitor.visit(this.m_list.get(l_i)))) return false;
      }
    
    return true;
    }
  }

File Information:

file name:SubList.java
package:org.sfc.collections
qualified name:org.sfc.collections.SubList.java
file type:Java Source File
download location:download http://dgpf.sourceforge.net/source/org/sfc/collections/SubList.java
size:7.618 KB (7801 B)
uploaded: 2018-01-07 12:03:36 GMT+0000
last update: 2006-06-09 06:10:15 GMT+0000
last access: 2018-04-21 07:34:33 GMT+0000

statistics online since 2006-01-02.   RSS Feed
Contact us by sending an email to tweise@gmx.de to receive further information, to report errors, or to join our project.
All content on this site (http://dgpf.sourceforge.net/) is LGPL-licensed.
http://dgpf.sourceforge.net/scripts/source/source.php last modified at 2018-01-07 12:03:34 GMT+0000 served at 2018-04-21 07:34:33 GMT+0000.
Valid CSS Valid XHTML 1.1
Valid RSS SourceForge.net Logo