17dd252788645e940eada959bdde927426e2531c9Paul Duffin/*
27dd252788645e940eada959bdde927426e2531c9Paul Duffin * Copyright (C) 2012 The Guava Authors
37dd252788645e940eada959bdde927426e2531c9Paul Duffin *
47dd252788645e940eada959bdde927426e2531c9Paul Duffin * Licensed under the Apache License, Version 2.0 (the "License");
57dd252788645e940eada959bdde927426e2531c9Paul Duffin * you may not use this file except in compliance with the License.
67dd252788645e940eada959bdde927426e2531c9Paul Duffin * You may obtain a copy of the License at
77dd252788645e940eada959bdde927426e2531c9Paul Duffin *
87dd252788645e940eada959bdde927426e2531c9Paul Duffin * http://www.apache.org/licenses/LICENSE-2.0
97dd252788645e940eada959bdde927426e2531c9Paul Duffin *
107dd252788645e940eada959bdde927426e2531c9Paul Duffin * Unless required by applicable law or agreed to in writing, software
117dd252788645e940eada959bdde927426e2531c9Paul Duffin * distributed under the License is distributed on an "AS IS" BASIS,
127dd252788645e940eada959bdde927426e2531c9Paul Duffin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137dd252788645e940eada959bdde927426e2531c9Paul Duffin * See the License for the specific language governing permissions and
147dd252788645e940eada959bdde927426e2531c9Paul Duffin * limitations under the License.
157dd252788645e940eada959bdde927426e2531c9Paul Duffin */
167dd252788645e940eada959bdde927426e2531c9Paul Duffin
177dd252788645e940eada959bdde927426e2531c9Paul Duffinpackage com.google.common.collect;
187dd252788645e940eada959bdde927426e2531c9Paul Duffin
197dd252788645e940eada959bdde927426e2531c9Paul Duffinimport static com.google.common.base.Preconditions.checkNotNull;
207dd252788645e940eada959bdde927426e2531c9Paul Duffin
217dd252788645e940eada959bdde927426e2531c9Paul Duffinimport com.google.common.annotations.GwtCompatible;
227dd252788645e940eada959bdde927426e2531c9Paul Duffin
237dd252788645e940eada959bdde927426e2531c9Paul Duffinimport java.util.Iterator;
247dd252788645e940eada959bdde927426e2531c9Paul Duffin
257dd252788645e940eada959bdde927426e2531c9Paul Duffin/**
267dd252788645e940eada959bdde927426e2531c9Paul Duffin * An iterator that transforms a backing iterator; for internal use. This avoids
277dd252788645e940eada959bdde927426e2531c9Paul Duffin * the object overhead of constructing a {@link Function} for internal methods.
287dd252788645e940eada959bdde927426e2531c9Paul Duffin *
297dd252788645e940eada959bdde927426e2531c9Paul Duffin * @author Louis Wasserman
307dd252788645e940eada959bdde927426e2531c9Paul Duffin */
317dd252788645e940eada959bdde927426e2531c9Paul Duffin@GwtCompatible
327dd252788645e940eada959bdde927426e2531c9Paul Duffinabstract class TransformedIterator<F, T> implements Iterator<T> {
337dd252788645e940eada959bdde927426e2531c9Paul Duffin  final Iterator<? extends F> backingIterator;
347dd252788645e940eada959bdde927426e2531c9Paul Duffin
357dd252788645e940eada959bdde927426e2531c9Paul Duffin  TransformedIterator(Iterator<? extends F> backingIterator) {
367dd252788645e940eada959bdde927426e2531c9Paul Duffin    this.backingIterator = checkNotNull(backingIterator);
377dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
387dd252788645e940eada959bdde927426e2531c9Paul Duffin
397dd252788645e940eada959bdde927426e2531c9Paul Duffin  abstract T transform(F from);
407dd252788645e940eada959bdde927426e2531c9Paul Duffin
410888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
427dd252788645e940eada959bdde927426e2531c9Paul Duffin  public final boolean hasNext() {
437dd252788645e940eada959bdde927426e2531c9Paul Duffin    return backingIterator.hasNext();
447dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
457dd252788645e940eada959bdde927426e2531c9Paul Duffin
460888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
477dd252788645e940eada959bdde927426e2531c9Paul Duffin  public final T next() {
487dd252788645e940eada959bdde927426e2531c9Paul Duffin    return transform(backingIterator.next());
497dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
507dd252788645e940eada959bdde927426e2531c9Paul Duffin
510888a09821a98ac0680fad765217302858e70fa4Paul Duffin  @Override
527dd252788645e940eada959bdde927426e2531c9Paul Duffin  public final void remove() {
537dd252788645e940eada959bdde927426e2531c9Paul Duffin    backingIterator.remove();
547dd252788645e940eada959bdde927426e2531c9Paul Duffin  }
557dd252788645e940eada959bdde927426e2531c9Paul Duffin}
56