import ceylon.language.impl{
BaseIterator,
BaseIterable,
reach
}
class ReferencesImpl(instance) extends BaseIterable<ReachableReference->Anything, Null>()
satisfies References&Identifiable {
shared actual Anything instance;
shared actual Iterator<ReachableReference->Anything> iterator() {
if (exists instance) {
return object extends BaseIterator<ReachableReference->Anything>()
satisfies Identifiable {
Iterator<ReachableReference> it = outer.references.iterator();
shared actual <ReachableReference->Anything>|Finished next() {
ReachableReference|Finished next = it.next();
if (is Finished next) {
return finished;
} else {
return next->next.referred(instance);
}
}
};
} else {
return emptyIterator;
}
}
shared actual Iterable<ReachableReference/*<Instance>*/> references {
return object extends BaseIterable<ReachableReference, Null>()
satisfies Identifiable {
shared actual Iterator<ReachableReference> iterator() {
return reach.references(instance);
}
};
}
}