Following the previous discussion do you think this is a good patch: // O(1) implementation of `contains()` for ranges of comparable elements. extension Range where Element: Comparable { @_transparent @warn_unused_result func _customContainsEquatableElement( element: Generator.Element ) -> Bool? { return element >= self.startIndex && element < self.endIndex } }
> On Dec 30, 2015, at 6:42 PM, Ling Wang <an0...@gmail.com> wrote: > > Got it. `contains` is only declared in extension. Interesting workaround. > Thanks. > >> On Dec 30, 2015, at 4:45 PM, Dmitri Gribenko <griboz...@gmail.com> wrote: >> >> On Wed, Dec 30, 2015 at 8:34 PM, Ling Wang via swift-dev >> <swift-dev@swift.org> wrote: >>> After reviewing the code of stdlib I found no one actually implements >>> _customContainsEquatableElement: >>> 1. Its default implementation in `SequenceType` just returns nil. >>> 2. The implementation in `Set` delegates to `contains` which is bad because >>> it reverses their relationship: the default implementation of `contains` in >>> `SequenceType` delegates to `_customContainsEquatableElement`. >>> 3. In all other place it just delegates to another `SequenceType`. >>> >>> So no one is doing real work. >>> >>> If the current _customContainsEquatableElement is only a relic I suggest we >>> remove it and clean up related code. >> >> It is not a relic. It allows the contains() method to perform dynamic >> dispatch in case the container knows something extra about the >> elements. >> >> Consider the case when you have a Set typed as a plain Sequence or a >> Collection. In that case, you won't be able to call the custom >> Set.contains() method, the overload resolution will only see the >> protocol extension. This extra entry point, >> _customContainsEquatableElement, allows us to perform dynamic dispatch >> and use the fast Set implementation if it is available. >> >> Dmitri >> >> -- >> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if >> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <griboz...@gmail.com>*/ > _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev