/*
VisAD system for interactive analysis and visualization of numerical
data.  Copyright (C) 1996 - 2017 Bill Hibbard, Curtis Rueden, Tom
Rink, Dave Glowacki, Steve Emmerson, Tom Whittaker, Don Murray, and
Tommy Jasmin.

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This library 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
Library General Public License for more details.

You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA
*/

package visad.data.amanda;

import java.util.Arrays;
import java.util.ArrayList;

public class ModuleList
{
  private ArrayList list;
  private Module[] sortedArray;

  public ModuleList()
  {
    list = null;
    sortedArray = null;
  }

  public void add(Module mod)
  {
    if (list == null) {
      list = new ArrayList();
    }

    list.add(mod);
  }

  public void dump(java.io.PrintStream out)
  {
    // if there are modules to be sorted, do it now
    if (list != null && list.size() > 0) {
      sort();
    }

    // if there are no modules, we're done dumping
    if (sortedArray == null) {
      return;
    }

    final int nMods = sortedArray.length;
    for (int i = 0; i < nMods; i++) {
      out.println(sortedArray[i]);
    }
  }

  public Module find(int number)
  {
    // if there are modules to be sorted, do it now
    if (list != null && list.size() > 0) {
      sort();
    }

    // if one or more sorted modules exist...
    if (sortedArray != null) {

      // look for the specified module number...
      int idx = Arrays.binarySearch(sortedArray, new Module(number));
      if (idx >= 0) {

        // return the desired module
        return sortedArray[idx];
      }
    }

    // couldn't find a module with that number
    return null;
  }

  public Module get(int i)
  {
    // if there are modules to be sorted, do it now
    if (list != null && list.size() > 0) {
      sort();
    }

    if (i < 0 || sortedArray == null || i >= sortedArray.length) {
      return null;
    }

    return sortedArray[i];
  }

  public final boolean isInitialized()
  {
    return (sortedArray != null || (list != null && list.size() > 0));
  }

  public int size()
  {
    int len = 0;

    if (list != null) {
      len += list.size();
    }

    if (sortedArray != null) {
      len += sortedArray.length;
    }

    return len;
  }

  private void sort()
  {
    // if some modules have been sorted...
    if (sortedArray != null) {

      // merge in previously sorted list of modules
      for (int i = 0; i < sortedArray.length; i++) {
        list.add(sortedArray[i]);
      }
    }

    // sort modules
    sortedArray = (Module[] )list.toArray(new Module[list.size()]);
    Arrays.sort(sortedArray);

    // out with the old
    list.clear();
  }

  public String toString()
  {
    StringBuffer buf = new StringBuffer("ModuleList[");

    boolean isEmpty = true;

    if (list != null && list.size() > 0) {
      buf.append("unsorted=");
      buf.append(list.size());
      isEmpty = false;
    }

    if (sortedArray != null) {
      buf.append("sorted=");
      buf.append(sortedArray.length);
      isEmpty = false;
    }

    if (isEmpty) buf.append("empty");

    buf.append(']');
    return buf.toString();
  }
}

 

Ads help maintain this website.