001    /*
002     *  This file is part of the Jikes RVM project (http://jikesrvm.org).
003     *
004     *  This file is licensed to You under the Eclipse Public License (EPL);
005     *  You may not use this file except in compliance with the License. You
006     *  may obtain a copy of the License at
007     *
008     *      http://www.opensource.org/licenses/eclipse-1.0.php
009     *
010     *  See the COPYRIGHT.txt file distributed with this work for information
011     *  regarding copyright ownership.
012     */
013    package org.jikesrvm.compilers.opt.util;
014    
015    import java.util.ArrayList;
016    import java.util.Enumeration;
017    import java.util.NoSuchElementException;
018    
019    /**
020     * An enumerator that provides access to the reverse order of elements for
021     * a given {@link Enumeration}.
022     */
023    public final class ReverseEnumerator<T> implements Enumeration<T> {
024    
025      private final ArrayList<T> vec;
026      private int index;
027    
028      public ReverseEnumerator(Enumeration<T> e) {
029        vec = new ArrayList<T>();
030        while (e.hasMoreElements()) {
031          vec.add(e.nextElement());
032        }
033        index = vec.size();
034      }
035    
036      @Override
037      public boolean hasMoreElements() {
038        return index > 0;
039      }
040    
041      @Override
042      public T nextElement() {
043        index--;
044        if (index >= 0) {
045          return vec.get(index);
046        } else {
047          throw new NoSuchElementException();
048        }
049      }
050    
051    }