FOUND Coverage Report


src/
File: command-line/execution/executors.hpp
Date: 2026-03-24 21:41:51
Lines:
1/1
100.0%
Functions:
1/1
100.0%
Branches:
0/0
-%

Line Branch Exec Source
1 #ifndef SRC_COMMAND_LINE_EXECUTION_EXECUTORS_HPP_
2 #define SRC_COMMAND_LINE_EXECUTION_EXECUTORS_HPP_
3
4 #include <memory>
5
6 #include "common/pipeline/pipelines.hpp"
7 #include "command-line/parsing/options.hpp"
8 #include "common/style.hpp"
9
10 #include "calibrate/calibrate.hpp"
11
12 #include "distance/edge.hpp"
13 #include "distance/distance.hpp"
14 #include "distance/vectorize.hpp"
15
16 #include "orbit/orbit.hpp"
17
18 namespace found {
19
20 /**
21 * PipelineExecutor is an interface for classes
22 * that execute complex pipelines.
23 */
24 class PipelineExecutor {
25 public:
26 /// Destroys this
27 44 virtual ~PipelineExecutor() = default;
28 /**
29 * Executes the relavent Pipeline
30 */
31 virtual void ExecutePipeline() = 0;
32 /**
33 * Outputs the results of the Pipeline
34 * in some format
35 */
36 virtual void OutputResults() = 0;
37 };
38
39 /**
40 * CalibrationPipelineExecutor is the pipeline
41 * executor for the calibration pipeline.
42 */
43 class CalibrationPipelineExecutor : public PipelineExecutor {
44 public:
45 /**
46 * Constructs a CalibrationPipelineExecutor
47 *
48 * @param options The options to create the pipeline
49 * @param calibrationAlgorithm The calibration algorithm to use
50 */
51 explicit CalibrationPipelineExecutor(CalibrationOptions &&options,
52 std::unique_ptr<CalibrationAlgorithm> calibrationAlgorithm);
53
54 void ExecutePipeline() override;
55 void OutputResults() override;
56
57 private:
58 /// The Calibration options being used
59 const CalibrationOptions options_;
60 /// The Calibration pipeline
61 CalibrationPipeline pipeline_;
62 /// The Calibration Algorithm used
63 std::unique_ptr<CalibrationAlgorithm> calibrationAlgorithm;
64 };
65
66 /**
67 * DistancePipelineExecutor is the pipeline
68 * executor for the distance determination pipeline.
69 */
70 class DistancePipelineExecutor : public PipelineExecutor {
71 public:
72 /**
73 * Destroys this and all distance determination pipeline resources
74 */
75 ~DistancePipelineExecutor();
76
77 /**
78 * Constructs a DistancePipelineExecutor
79 *
80 * @param options The options to create the pipeline
81 * @param edgeDetectionAlgorithm The edge detection algorithm to use
82 * @param distanceAlgorithm The distance determination algorithm to use
83 * @param vectorizationAlgorithm The vectorization algorithm to use
84 *
85 * @pre options.image.image must be point to heap allocated memory.
86 * This is guarenteed as long as strtoimage is used to create the image,
87 * and it throws an error if the image is not valid.
88 */
89 explicit DistancePipelineExecutor(DistanceOptions &&options,
90 std::unique_ptr<EdgeDetectionAlgorithm> edgeDetectionAlgorithm,
91 std::unique_ptr<DistanceDeterminationAlgorithm> distanceAlgorithm,
92 std::unique_ptr<VectorGenerationAlgorithm> vectorizationAlgorithm);
93
94 void ExecutePipeline() override;
95 void OutputResults() override;
96
97 private:
98 /// The DistanceOptions being used
99 const DistanceOptions options_;
100 /// The Distance pipeline being used
101 DistancePipeline pipeline_;
102 /// The Edge Detection Algorithm used
103 std::unique_ptr<EdgeDetectionAlgorithm> edgeDetectionAlgorithm;
104 /// The Distance Determination Algorithm being used
105 std::unique_ptr<DistanceDeterminationAlgorithm> distanceAlgorithm;
106 /// The Vectorization/Rotation Algorithm being used
107 std::unique_ptr<VectorGenerationAlgorithm> vectorizationAlgorithm;
108 };
109
110 /**
111 * OrbitPipelineExecutor is the pipeline
112 * executor for the orbit determination pipeline.
113 */
114 class OrbitPipelineExecutor : public PipelineExecutor {
115 public:
116 /**
117 * Constructs a OrbitPipelineExecutor
118 *
119 * @param options The options to create the pipeline
120 * @param orbitPropagationAlgorithm The orbit propagation algorithm to use
121 */
122 explicit OrbitPipelineExecutor(OrbitOptions &&options,
123 std::unique_ptr<OrbitPropagationAlgorithm> orbitPropagationAlgorithm);
124
125 void ExecutePipeline() override;
126 void OutputResults() override;
127
128 private:
129 /// The Orbit options being used
130 const OrbitOptions options_;
131 /// The Orbit pipeline
132 OrbitPipeline pipeline_;
133 /// The Orbit Propagation Algorithm being used
134 std::unique_ptr<OrbitPropagationAlgorithm> orbitPropagationAlgorithm;
135 };
136
137 } // namespace found
138
139 #endif // SRC_COMMAND_LINE_EXECUTION_EXECUTORS_HPP_
140