2014-02-16 09:20:31 -08:00
|
|
|
class Sequence {
|
2015-03-06 07:01:02 -08:00
|
|
|
count {
|
|
|
|
|
var result = 0
|
|
|
|
|
for (element in this) {
|
|
|
|
|
result = result + 1
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
2014-02-18 11:54:55 -06:00
|
|
|
map(f) {
|
2015-01-25 22:49:30 -08:00
|
|
|
var result = new List
|
2014-02-16 09:20:31 -08:00
|
|
|
for (element in this) {
|
|
|
|
|
result.add(f.call(element))
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
|
|
|
|
|
2014-02-18 11:54:55 -06:00
|
|
|
where(f) {
|
2015-01-25 22:49:30 -08:00
|
|
|
var result = new List
|
2014-02-16 09:20:31 -08:00
|
|
|
for (element in this) {
|
|
|
|
|
if (f.call(element)) result.add(element)
|
|
|
|
|
}
|
|
|
|
|
return result
|
|
|
|
|
}
|
2015-01-13 23:47:01 -08:00
|
|
|
|
2015-01-14 23:19:31 -08:00
|
|
|
all(f) {
|
2015-01-13 23:47:01 -08:00
|
|
|
for (element in this) {
|
2015-01-14 22:42:15 -08:00
|
|
|
if (!f.call(element)) return false
|
2015-01-13 23:47:01 -08:00
|
|
|
}
|
|
|
|
|
return true
|
|
|
|
|
}
|
2015-01-15 16:29:49 +01:00
|
|
|
|
2015-02-28 21:45:39 +01:00
|
|
|
any(f) {
|
|
|
|
|
for (element in this) {
|
|
|
|
|
if (f.call(element)) return true
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-15 16:29:49 +01:00
|
|
|
reduce(acc, f) {
|
|
|
|
|
for (element in this) {
|
|
|
|
|
acc = f.call(acc, element)
|
|
|
|
|
}
|
|
|
|
|
return acc
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-16 09:24:18 +01:00
|
|
|
reduce(f) {
|
|
|
|
|
var iter = iterate(null)
|
|
|
|
|
if (!iter) Fiber.abort("Can't reduce an empty sequence.")
|
|
|
|
|
|
|
|
|
|
// Seed with the first element.
|
|
|
|
|
var result = iteratorValue(iter)
|
|
|
|
|
while (iter = iterate(iter)) {
|
|
|
|
|
result = f.call(result, iteratorValue(iter))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
}
|
2015-01-15 16:29:49 +01:00
|
|
|
|
2015-01-23 20:45:23 -08:00
|
|
|
join { join("") }
|
|
|
|
|
|
|
|
|
|
join(sep) {
|
|
|
|
|
var first = true
|
|
|
|
|
var result = ""
|
|
|
|
|
|
|
|
|
|
for (element in this) {
|
|
|
|
|
if (!first) result = result + sep
|
|
|
|
|
first = false
|
|
|
|
|
result = result + element.toString
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result
|
|
|
|
|
}
|
2014-02-16 09:20:31 -08:00
|
|
|
}
|
|
|
|
|
|
2015-02-16 10:21:29 -08:00
|
|
|
class String is Sequence {}
|
2015-01-22 20:58:22 -08:00
|
|
|
|
2014-02-16 09:20:31 -08:00
|
|
|
class List is Sequence {
|
2014-04-06 08:37:37 -07:00
|
|
|
addAll(other) {
|
|
|
|
|
for (element in other) {
|
|
|
|
|
add(element)
|
|
|
|
|
}
|
|
|
|
|
return other
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-23 20:45:23 -08:00
|
|
|
toString { "[" + join(", ") + "]" }
|
2014-02-14 11:09:02 -06:00
|
|
|
|
2014-04-08 17:54:37 -07:00
|
|
|
+(other) {
|
2014-02-14 20:10:41 -08:00
|
|
|
var result = this[0..-1]
|
2014-04-08 17:54:37 -07:00
|
|
|
for (element in other) {
|
2014-02-14 17:24:06 -08:00
|
|
|
result.add(element)
|
2014-02-14 11:09:02 -06:00
|
|
|
}
|
2014-02-14 17:24:06 -08:00
|
|
|
return result
|
2014-02-14 11:09:02 -06:00
|
|
|
}
|
2015-01-09 16:02:40 -06:00
|
|
|
|
|
|
|
|
contains(element) {
|
|
|
|
|
for (item in this) {
|
|
|
|
|
if (element == item) {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return false
|
|
|
|
|
}
|
2014-02-04 08:44:59 -08:00
|
|
|
}
|
2014-02-16 09:20:31 -08:00
|
|
|
|
2015-01-24 22:27:35 -08:00
|
|
|
class Map {
|
2015-01-25 10:27:38 -08:00
|
|
|
keys { new MapKeySequence(this) }
|
|
|
|
|
values { new MapValueSequence(this) }
|
|
|
|
|
|
|
|
|
|
toString {
|
|
|
|
|
var first = true
|
|
|
|
|
var result = "{"
|
|
|
|
|
|
|
|
|
|
for (key in keys) {
|
|
|
|
|
if (!first) result = result + ", "
|
|
|
|
|
first = false
|
|
|
|
|
result = result + key.toString + ": " + this[key].toString
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result + "}"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class MapKeySequence is Sequence {
|
|
|
|
|
new(map) {
|
|
|
|
|
_map = map
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iterate(n) { _map.iterate_(n) }
|
|
|
|
|
iteratorValue(iterator) { _map.keyIteratorValue_(iterator) }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class MapValueSequence is Sequence {
|
|
|
|
|
new(map) {
|
|
|
|
|
_map = map
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
iterate(n) { _map.iterate_(n) }
|
|
|
|
|
iteratorValue(iterator) { _map.valueIteratorValue_(iterator) }
|
2015-01-24 22:27:35 -08:00
|
|
|
}
|
|
|
|
|
|
2014-02-16 09:20:31 -08:00
|
|
|
class Range is Sequence {}
|