485c8a5999
Add IterableMixin and IterableBase to dart:collection. For now, the implementation is duplicated, because mixins and const constructors don't mix. We hope that mixins will be improved in the future to allow using the mixin to define the base class. Review URL: https://codereview.chromium.org//14022007 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@21457 260f80e4-7a28-3924-810f-c04153c831b5
45 lines
911 B
Dart
45 lines
911 B
Dart
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
import "dart:collection";
|
|
import "package:expect/expect.dart";
|
|
|
|
class A extends IterableBase {
|
|
int count;
|
|
A(this.count);
|
|
|
|
Iterator get iterator {
|
|
return new AIterator(count);
|
|
}
|
|
}
|
|
|
|
class AIterator implements Iterator {
|
|
int _count;
|
|
int _current;
|
|
|
|
AIterator(this._count);
|
|
|
|
bool moveNext() {
|
|
if (_count > 0) {
|
|
_current = _count;
|
|
_count--;
|
|
return true;
|
|
}
|
|
_current = null;
|
|
return false;
|
|
}
|
|
|
|
get current => _current;
|
|
}
|
|
|
|
main() {
|
|
var a = new A(10);
|
|
Expect.equals(10, a.length);
|
|
a = new A(0);
|
|
Expect.equals(0, a.length);
|
|
a = new A(5);
|
|
Expect.equals(5, a.map((e) => e + 1).length);
|
|
Expect.equals(3, a.where((e) => e >= 3).length);
|
|
}
|