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 package lapisx.sort; 017 import java.util.Enumeration; 018 //import java.util.NoSuchElementException; 019 import java.util.Vector; 020 021 /** 022 * Enumeration which reorders the elements of another enumeration. 023 */ 024 public abstract class SortedEnumeration implements Enumeration { 025 Enumeration original; // original enumeration 026 Enumeration sorted; // enumeration after sorting 027 028 public SortedEnumeration (Enumeration e) { 029 original = e; 030 } 031 032 public abstract int compare (Object o1, Object o2); 033 034 public boolean hasMoreElements () { 035 if (sorted == null) 036 sorted = sort (); 037 return sorted.hasMoreElements (); 038 } 039 040 public Object nextElement () { 041 if (sorted == null) 042 sorted = sort (); 043 return sorted.nextElement (); 044 } 045 046 Enumeration sort () { 047 // read the original enumeration into a vector 048 Vector v = new Vector (); 049 while (original.hasMoreElements ()) 050 v.addElement (original.nextElement ()); 051 052 // sort the vector 053 MergeSort.sort (new SortableVector (v) { 054 public int compare (Object o1, Object o2) { 055 return SortedEnumeration.this.compare (o1, o2); 056 } 057 }); 058 059 // enumerate its elements 060 return v.elements (); 061 } 062 }