Package com.l2jfrozen.gameserver.geo.util

Source Code of com.l2jfrozen.gameserver.geo.util.L2FastCollection

/*
* 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; either version 2, or (at your option)
* any later version.
*
* 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.
*
* http://www.gnu.org/copyleft/gpl.html
*/
package com.l2jfrozen.gameserver.geo.util;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.List;
import java.util.RandomAccess;

import javolution.util.FastCollection;
import javolution.util.FastCollection.Record;

@SuppressWarnings("unchecked")
public abstract class L2FastCollection<E> implements Collection<E>
{
  public abstract Record head();

  public abstract Record tail();

  public abstract E valueOf(Record record);

  public abstract void delete(Record record);

  public abstract void delete(Record record, E value);

  public final E getFirst()
  {
    final Record first = head().getNext();
    if(first == tail())
      return null;

    return valueOf(first);
  }

  public final E getLast()
  {
    final Record last = tail().getPrevious();
    if(last == head())
      return null;

    return valueOf(last);
  }

  public final E removeFirst()
  {
    final Record first = head().getNext();
    if(first == tail())
      return null;

    final E value = valueOf(first);
    delete(first, value);
    return value;
  }

  public final E removeLast()
  {
    final Record last = tail().getPrevious();
    if(last == head())
      return null;

    final E value = valueOf(last);
    delete(last, value);
    return value;
  }

  public boolean addAll(E[] c)
  {
    boolean modified = false;
   
    for(E e : c)
      if(add(e))
        modified = true;

    return modified;
  }

  @Override
  public boolean addAll(Collection<? extends E> c)
  {
    return addAll((Iterable<? extends E>)c);
  }

  public boolean addAll(Iterable<? extends E> c)
  {
    if(c instanceof RandomAccess && c instanceof List<?>)
      return addAll((List<? extends E>)c);

    if(c instanceof FastCollection<?>)
      return addAll((FastCollection<? extends E>)c);

    if(c instanceof L2FastCollection<?>)
      return addAll((L2FastCollection<? extends E>)c);

    boolean modified = false;

    for(E e : c)
      if(add(e))
        modified = true;

    return modified;
  }

  private boolean addAll(L2FastCollection<? extends E> c)
  {
    boolean modified = false;

    for(Record r = c.head(), end = c.tail(); (r = r.getNext()) != end;)
      if(add(c.valueOf(r)))
        modified = true;

    return modified;
  }

  private boolean addAll(FastCollection<? extends E> c)
  {
    boolean modified = false;

    for(Record r = c.head(), end = c.tail(); (r = r.getNext()) != end;)
      if(add(c.valueOf(r)))
        modified = true;

    return modified;
  }

  private boolean addAll(List<? extends E> c)
  {
    boolean modified = false;

    for(int i = 0, size = c.size(); i < size;)
      if(add(c.get(i++)))
        modified = true;

    return modified;
  }

  public boolean containsAll(Object[] c)
  {
    for(Object obj : c)
      if(!contains(obj))
        return false;

    return true;
  }

  @Override
  public boolean containsAll(Collection<?> c)
  {
    return containsAll((Iterable<? extends E>)c);
  }

  public boolean containsAll(Iterable<?> c)
  {
    if(c instanceof RandomAccess && c instanceof List<?>)
      return containsAll((List<?>)c);

    if(c instanceof FastCollection<?>)
      return containsAll((FastCollection<?>)c);

    if(c instanceof L2FastCollection<?>)
      return containsAll((L2FastCollection<?>)c);

    for(Object obj : c)
      if(!contains(obj))
        return false;

    return true;
  }

  private boolean containsAll(L2FastCollection<?> c)
  {
    for(Record r = c.head(), end = c.tail(); (r = r.getNext()) != end;)
      if(!contains(c.valueOf(r)))
        return false;

    return true;
  }

  private boolean containsAll(FastCollection<?> c)
  {
    for(Record r = c.head(), end = c.tail(); (r = r.getNext()) != end;)
      if(!contains(c.valueOf(r)))
        return false;

    return true;
  }

  private boolean containsAll(List<?> c)
  {
    for(int i = 0, size = c.size(); i < size;)
      if(!contains(c.get(i++)))
        return false;

    return true;
  }

  @Override
  public boolean removeAll(Collection<?> c)
  {
    boolean modified = false;

    for(Record head = head(), r = tail().getPrevious(), previous; r != head; r = previous)
    {
      previous = r.getPrevious();
      if(c.contains(valueOf(r)))
      {
        delete(r);
        modified = true;
      }
    }

    return modified;
  }

  @Override
  public boolean retainAll(Collection<?> c)
  {
    boolean modified = false;

    for(Record head = head(), r = tail().getPrevious(), previous; r != head; r = previous)
    {
      previous = r.getPrevious();
      if(!c.contains(valueOf(r)))
      {
        delete(r);
        modified = true;
      }
    }

    return modified;
  }

  @Override
  public Object[] toArray()
  {
    return toArray(new Object[size()]);
  }

  @Override
  public <T> T[] toArray(T[] array)
  {
    int size = size();

    if(array.length != size)
      array = (T[])Array.newInstance(array.getClass().getComponentType(), size);

    if(size == 0 && array.length == 0)
      return array;

    int i = 0;
    for(Record r = head(), end = tail(); (r = r.getNext()) != end;)
      array[i++] = (T)valueOf(r);

    return array;
  }
}
TOP

Related Classes of com.l2jfrozen.gameserver.geo.util.L2FastCollection

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.