Package erjang.m.java

Source Code of erjang.m.java.JavaMapIterator

package erjang.m.java;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import erjang.ECons;
import erjang.EList;
import erjang.ENil;
import erjang.EObject;
import erjang.EProc;
import erjang.ERT;
import erjang.ESeq;
import erjang.ETuple2;

class JavaMapIterator extends ESeq {
  final Iterator<Entry> rest;
  final Entry<?, ?> ent;
  private EProc self;

  @Override
  public ECons testNonEmptyList() {
    return this;
  }
 
  @Override
  public boolean isNil() {
    return false;
  }
 
  @Override
  public ENil testNil() {
    return null;
  }
 
  @SuppressWarnings("unchecked")
  static ESeq box(EProc self, Iterator<Map.Entry> iterator) {
    if (iterator.hasNext())
      return new JavaMapIterator(self, iterator);
    return ERT.NIL;
  }

  @SuppressWarnings("unchecked")
  private JavaMapIterator(EProc self, Iterator<Map.Entry> it) {
    ent = it.next();
    this.rest = it;
    this.self = self;
  }

  @Override
  public ESeq cons(EObject h) {
    return new EList(h, this);
  }

  @Override
  public ESeq tail() {
    ESeq tail = box(self, rest);
    return tail;
  }

  @Override
  public EObject head() {
    return new ETuple2(JavaObject.box(self, ent.getKey()),
               JavaObject.box(self, ent.getValue()));
  }

  @Override
  public int hashCode() {
    return rest.hashCode(); // What to do here? The iterator may be an infinite stream.
  }
}
TOP

Related Classes of erjang.m.java.JavaMapIterator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.