001 /* 002 * LAPIS lightweight structured text processing system 003 * 004 * Copyright (C) 1998-2002 Carnegie Mellon University, 005 * Copyright (C) 2003 Massachusetts Institute of Technology. 006 * All rights reserved. 007 * 008 * This library is free software; you can redistribute it 009 * and/or modify it under the terms of the GNU General 010 * Public License as published by the Free Software 011 * Foundation, version 2. 012 * 013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/ 014 */ 015 016 017 package lapisx.enum; 018 import java.util.Enumeration; 019 import java.util.NoSuchElementException; 020 import java.util.Vector; 021 /** 022 * Enumeration which can be restarted from the beginning. 023 */ 024 public class MemoizedEnumeration implements RestartableEnumeration { 025 Vector v; // elements which have already been returned 026 Enumeration e1; // enumeration of v 027 Enumeration e2; // main enumeration 028 029 public MemoizedEnumeration (Enumeration e) { 030 this.v = new Vector (); 031 this.e2 = e; 032 } 033 034 public MemoizedEnumeration (Vector v) { 035 this.v = (Vector) v.clone (); 036 this.e1 = this.v.elements (); 037 } 038 039 public boolean hasMoreElements () { 040 if (e1 != null) { 041 if (e1.hasMoreElements ()) 042 return true; 043 else 044 e1 = null; 045 } 046 047 if (e2 != null) { 048 if (e2.hasMoreElements ()) 049 return true; 050 else 051 e2 = null; 052 } 053 054 return false; 055 } 056 057 public Object nextElement () { 058 if (e1 != null) 059 try { 060 return e1.nextElement (); 061 } catch (NoSuchElementException e) { 062 e1 = null; 063 } 064 065 if (e2 != null) 066 try { 067 Object o = e2.nextElement (); 068 v.addElement (o); 069 return o; 070 } catch (NoSuchElementException e) { 071 e2 = null; 072 } 073 074 throw new NoSuchElementException (); 075 } 076 077 public void restart () { 078 e1 = v.elements (); 079 } 080 }