/** * Tells whether this instance lends itself for {@link Breakpoint}s. That is particularly the case if: * <ol> * <li>it is produced immediately by its producer ({@link #getProducer()};</li> * <li>the contained data are at rest;</li> * <li>and, as a bonus, the cardinality of the data can be observed.</li> * </ol> * * @return whether this instance lends itself for {@link Breakpoint}s */ public boolean isSuitableForBreakpoint() { return this.getDescriptor().isSuitableForBreakpoint(); }
@Override public String toString() { return String.format("%s[%s,%s%s]", this.getClass().getSimpleName(), this.getChannelClass().getSimpleName(), this.isReusable() ? "r" : "-", this.isSuitableForBreakpoint() ? "b" : "-" ); }
/** * Starts the actual search. */ private Tree searchTree() { // Prepare the recursive traversal. final HashSet<ChannelDescriptor> visitedChannelDescriptors = new HashSet<>(16); visitedChannelDescriptors.add(this.sourceChannelDescriptor); // Perform the traversal. final Map<Bitmask, Tree> solutions = this.enumerate( visitedChannelDescriptors, this.sourceChannelDescriptor, Bitmask.EMPTY_BITMASK, this.sourceChannelDescriptor.isSuitableForBreakpoint() ); // Get hold of a comprehensive solution (if it exists). Bitmask requestedIndices = new Bitmask(this.destChannelDescriptorSets.size()); requestedIndices.flip(0, this.destChannelDescriptorSets.size()); return solutions.get(requestedIndices); }
targetChannelDescriptor, settledDestinationIndices, isVisitedBreakpointChannel || targetChannelDescriptor.isSuitableForBreakpoint() ); childSolutions.values().forEach(