OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. |
| 4 |
| 5 library barback.graph.node_status; |
| 6 |
| 7 /// The status of a node in barback's package graph. |
| 8 /// |
| 9 /// A node has three possible statuses: [IDLE], [MATERIALIZING], and [RUNNING]. |
| 10 /// These are ordered from least dirty to most dirty; the [dirtier] and |
| 11 /// [dirtiest] functions make use of this ordering. |
| 12 class NodeStatus { |
| 13 /// The node has finished its work and won't do anything else until external |
| 14 /// input causes it to. |
| 15 /// |
| 16 /// For deferred nodes, this may indicate that they're finished declaring |
| 17 /// their outputs and waiting to be forced. |
| 18 static const IDLE = const NodeStatus("idle"); |
| 19 |
| 20 /// The node has declared its outputs but their concrete values are still |
| 21 /// being generated. |
| 22 /// |
| 23 /// This is only meaningful for nodes that are or contain declaring |
| 24 /// transformers. Note that a lazy transformer that's declared its outputs but |
| 25 /// isn't actively working to generate them is considered [IDLE], not |
| 26 /// [MATERIALIZING]. |
| 27 static const MATERIALIZING = const NodeStatus("materializing"); |
| 28 |
| 29 /// The node is actively working on declaring or generating its outputs. |
| 30 /// |
| 31 /// Declaring transformers are only considered dirty until they're finished |
| 32 /// declaring their outputs; past that point, they're always either |
| 33 /// [MATERIALIZING] or [IDLE]. Non-declaring transformers, by contrast, are |
| 34 /// always either [RUNNING] or [IDLE]. |
| 35 static const RUNNING = const NodeStatus("running"); |
| 36 |
| 37 final String _name; |
| 38 |
| 39 /// Returns the dirtiest status in [statuses]. |
| 40 static NodeStatus dirtiest(Iterable<NodeStatus> statuses) => |
| 41 statuses.fold(NodeStatus.IDLE, |
| 42 (status1, status2) => status1.dirtier(status2)); |
| 43 |
| 44 const NodeStatus(this._name); |
| 45 |
| 46 String toString() => _name; |
| 47 |
| 48 /// Returns [this] or [other], whichever is dirtier. |
| 49 NodeStatus dirtier(NodeStatus other) { |
| 50 if (this == RUNNING || other == RUNNING) return RUNNING; |
| 51 if (this == MATERIALIZING || other == MATERIALIZING) return MATERIALIZING; |
| 52 return IDLE; |
| 53 } |
| 54 } |
OLD | NEW |