summaryrefslogtreecommitdiff
path: root/src/library/scalax/collection/generic/covariant/IterableTemplate.scala
blob: 715f88cd8ee363136211619272c220d6754a04fe (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*                     __                                               *\
**     ________ ___   / /  ___     Scala API                            **
**    / __/ __// _ | / /  / _ |    (c) 2003-2009, LAMP/EPFL             **
**  __\ \/ /__/ __ |/ /__/ __ |    http://scala-lang.org/               **
** /____/\___/_/ |_/____/_/ | |                                         **
**                          |/                                          **
\*                                                                      */

// $Id: Iterable.scala 15188 2008-05-24 15:01:02Z stepancheg $


package scalax.collection.generic.covariant

import annotation.unchecked.uncheckedVariance

/** Collection classes mixing in this class provide a method
 *  <code>elements</code> which returns an iterator over all the
 *  elements contained in the collection.
 *
 *  @note If a collection has a known <code>size</code>, it should also sub-type <code>Collection</code>.
 *        Only potentially unbounded collections should directly sub-class <code>Iterable</code>.
 *  @author  Matthias Zenger
 *  @version 1.1, 04/02/2004
 */
trait IterableTemplate[+CC[+B] <: IterableTemplate[CC, B] with Iterable[B], +A]
   extends generic.IterableTemplate[CC, A @uncheckedVariance] { self /*: CC[A]*/ =>

/* can't have a covariant view here, because mutable.Vector would
   override it
  override def view: IterableView[CC, A] = new IterableView[CC, A] {
    val origin = thisCC
    val elements: Iterator[A] = self.elements
  }
*/
}


// !!! todo: explain why @uncheckedVariance is justified here.