package blitz.collections class Contents internal constructor( private val iterable: Iterable ): Iterable { override fun iterator(): Iterator = iterable.iterator() override fun equals(other: Any?): Boolean { if (other !is Contents<*>) return false val it1 = this.iterable.iterator() val it2 = other.iterable.iterator() while (true) { val hasNext1 = it1.hasNext() val hasNext2 = it2.hasNext() if ((hasNext1 && !hasNext2) || (hasNext2 && !hasNext1)) return false if (!hasNext1) return true if (it1.next() != it2.next()) return false } } override fun hashCode(): Int = iterable.hashCode() override fun toString(): String = joinToString( separator = ", ", prefix = "[", postfix = "]" ) { it.toString() } } val Iterable.contents get() = Contents(this) val Sequence.contents get() = Contents(this.asIterable()) val Array.contents get() = Contents(this.asIterable()) val IntArray.contents get() = Contents(this.asIterable()) val ByteArray.contents get() = Contents(this.asIterable()) val DoubleArray.contents get() = Contents(this.asIterable()) val FloatArray.contents get() = Contents(this.asIterable())