package com.googlecode.totallylazy.segments;
import com.googlecode.totallylazy.Option;
import com.googlecode.totallylazy.Segment;
import com.googlecode.totallylazy.Sequence;
import com.googlecode.totallylazy.iterators.SegmentIterator;
import java.util.Iterator;
import static com.googlecode.totallylazy.Option.some;
import static com.googlecode.totallylazy.Unchecked.cast;
public abstract class AbstractSegment<T> implements Segment<T>, Iterable<T> {
@Override
public Option<T> headOption() {
return isEmpty()
? Option.<T>none()
: some(head());
}
@Override
public String toString() {
return sequence().toString();
}
@Override
public Iterator<T> iterator() {
return SegmentIterator.iterator(this);
}
public Sequence<T> sequence() {
return methods.sequence(this);
}
@Override
public int hashCode() {
return sequence().hashCode();
}
@Override
public boolean equals(Object obj) {
return obj instanceof Segment && methods.equalTo((Segment<?>) obj, this);
}
}