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 |