www.pudn.com > jnp-src.rar > IDList.java


/*
 * Java Network Programming, Second Edition
 * Merlin Hughes, Michael Shoffner, Derek Hamner
 * Manning Publications Company; ISBN 188477749X
 *
 * http://nitric.com/jnp/
 *
 * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner;
 * all rights reserved; see license.txt for details.
 */

import java.io.*; 
import java.util.*; 
 
public class IDList implements Serializable { 
  protected Vector ids, elements; 
   
  public IDList () { 
    ids = new Vector (); 
    elements = new Vector (); 
  } 
 
  protected int id; 
   
  public synchronized ID allocateID () { 
    return new ID (id ++); 
  } 
 
  protected int updateCount; 
 
  public int getUpdateCount () { 
    return updateCount; 
  } 
 
  public synchronized boolean addElement (ID id, Object element) { 
    if (ids.contains (id)) 
      return false; 
    ids.addElement (id); 
    elements.addElement (element); 
    ++ updateCount; 
    return true; 
  } 
 
  public synchronized boolean updateElement (ID oldID, ID id, Object element) { 
    int index = ids.indexOf (oldID); 
    if (index < 0) 
      return false; 
    ids.setElementAt (id, index); 
    elements.setElementAt (element, index); 
    ++ updateCount; 
    return true; 
  } 
 
  public synchronized boolean replaceElement (ID oldID, ID id, Object element) { 
    int index = ids.indexOf (oldID); 
    if (index < 0) 
      return false; 
    ids.removeElementAt (index); 
    elements.removeElementAt (index); 
    ids.addElement (id); 
    elements.addElement (element); 
    ++ updateCount; 
    return true; 
  } 
 
  public synchronized boolean removeElement (ID id) { 
    int index = ids.indexOf (id); 
    if (index < 0) 
      return false; 
    ids.removeElementAt (index); 
    elements.removeElementAt (index); 
    ++ updateCount; 
    return true; 
  } 
 
  public synchronized ID getID (Object element) { 
    int index = elements.indexOf (element); 
    if (index < 0) 
      return null; 
    else 
      return (ID) ids.elementAt (index); 
  } 
 
  public Enumeration getElements () { 
    return ((Vector) elements.clone ()).elements (); 
  } 
 
  public synchronized Object clone () { 
    try { 
      IDList idList = (IDList) super.clone (); 
      idList.ids = (Vector) ids.clone (); 
      idList.elements = (Vector) elements.clone (); 
      return idList; 
    } catch (CloneNotSupportedException ignored) { 
      return null; 
    } 
  } 
}