| 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 |