> On 7 Jul 2016, at 15:57, Karl via swift-evolution <[email protected]> > wrote: > > I believe the idea of RRC is that all you need to implement is the empty > initialiser and replaceSubrange(), and everything else (e.g. Append, insert) > is implemented in terms of those. Even the initialiser which takes existing > collection just initialises and empty one and appends the existing collection > (I.e. Calling replaceSubrange). > > If I understand you correctly, it will not be possible to initialise a > generic RRC any more, will it? Because that RRC may need additional > information (e.g. A maximum buffer size if it stores its data in multiple > discrete buffers) which you can’t provide generically. > > Maybe we could have a true copy-constructor instead? That is, replace > init<C:Collection>(_:) with init(_: Self), so that it could take any > additional arguments from that other instance?
A copying initialiser could work, but it should probably have a parameter for the type of copy to create (empty, shallow copy and deep copy for example), as I suspect it's the empty copy that RangeReplaceableCollection needs more than anything. Otherwise it shouldn't need initialisers on the protocol. This however is something that could (and should) be moved out into its own protocol I think, with RangeReplaceableCollection simply conforming that. _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
