OLD | NEW |
1 // Copyright 2012 Google Inc. All Rights Reserved. | 1 // Copyright 2012 Google Inc. All Rights Reserved. |
2 // Dart core library. | 2 // Dart core library. |
3 | 3 |
4 class FutureImpl<T> implements Future<T> { | 4 class FutureImpl<T> implements Future<T> { |
5 | 5 |
6 bool _isComplete = false; | 6 bool _isComplete = false; |
7 | 7 |
8 /** | 8 /** |
9 * Value that was provided to this Future by the Completer | 9 * Value that was provided to this Future by the Completer |
10 */ | 10 */ |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 : _successListeners = [], | 45 : _successListeners = [], |
46 _exceptionHandlers = [], | 46 _exceptionHandlers = [], |
47 _completionListeners = []; | 47 _completionListeners = []; |
48 | 48 |
49 factory FutureImpl.immediate(T value) { | 49 factory FutureImpl.immediate(T value) { |
50 final res = new FutureImpl(); | 50 final res = new FutureImpl(); |
51 res._setValue(value); | 51 res._setValue(value); |
52 return res; | 52 return res; |
53 } | 53 } |
54 | 54 |
55 T get value() { | 55 T get value { |
56 if (!isComplete) { | 56 if (!isComplete) { |
57 throw new FutureNotCompleteException(); | 57 throw new FutureNotCompleteException(); |
58 } | 58 } |
59 if (_exception !== null) { | 59 if (_exception !== null) { |
60 throw _exception; | 60 throw _exception; |
61 } | 61 } |
62 return _value; | 62 return _value; |
63 } | 63 } |
64 | 64 |
65 Object get exception() { | 65 Object get exception { |
66 if (!isComplete) { | 66 if (!isComplete) { |
67 throw new FutureNotCompleteException(); | 67 throw new FutureNotCompleteException(); |
68 } | 68 } |
69 return _exception; | 69 return _exception; |
70 } | 70 } |
71 | 71 |
72 Object get stackTrace() { | 72 Object get stackTrace { |
73 if (!isComplete) { | 73 if (!isComplete) { |
74 throw new FutureNotCompleteException(); | 74 throw new FutureNotCompleteException(); |
75 } | 75 } |
76 return _stackTrace; | 76 return _stackTrace; |
77 } | 77 } |
78 | 78 |
79 bool get isComplete() { | 79 bool get isComplete { |
80 return _isComplete; | 80 return _isComplete; |
81 } | 81 } |
82 | 82 |
83 bool get hasValue() { | 83 bool get hasValue { |
84 return isComplete && _exception === null; | 84 return isComplete && _exception === null; |
85 } | 85 } |
86 | 86 |
87 void then(void onSuccess(T value)) { | 87 void then(void onSuccess(T value)) { |
88 if (hasValue) { | 88 if (hasValue) { |
89 onSuccess(value); | 89 onSuccess(value); |
90 } else if (!isComplete) { | 90 } else if (!isComplete) { |
91 _successListeners.add(onSuccess); | 91 _successListeners.add(onSuccess); |
92 } else if (!_exceptionHandled) { | 92 } else if (!_exceptionHandled) { |
93 throw _exception; | 93 throw _exception; |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 return completer.future; | 231 return completer.future; |
232 } | 232 } |
233 } | 233 } |
234 | 234 |
235 class CompleterImpl<T> implements Completer<T> { | 235 class CompleterImpl<T> implements Completer<T> { |
236 | 236 |
237 final FutureImpl<T> _futureImpl; | 237 final FutureImpl<T> _futureImpl; |
238 | 238 |
239 CompleterImpl() : _futureImpl = new FutureImpl() {} | 239 CompleterImpl() : _futureImpl = new FutureImpl() {} |
240 | 240 |
241 Future<T> get future() { | 241 Future<T> get future { |
242 return _futureImpl; | 242 return _futureImpl; |
243 } | 243 } |
244 | 244 |
245 void complete(T value) { | 245 void complete(T value) { |
246 _futureImpl._setValue(value); | 246 _futureImpl._setValue(value); |
247 } | 247 } |
248 | 248 |
249 void completeException(Object exception, [Object stackTrace]) { | 249 void completeException(Object exception, [Object stackTrace]) { |
250 _futureImpl._setException(exception, stackTrace); | 250 _futureImpl._setException(exception, stackTrace); |
251 } | 251 } |
252 } | 252 } |
OLD | NEW |