Porytiles
Loading...
Searching...
No Matches
operation.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <expected>
4#include <typeindex>
5
6#include <gsl/pointers>
7
11
12namespace porytiles {
13
18 public:
19 ArtifactMetadata(std::string key, const std::type_index type)
20 : key_{std::move(key)}, expected_type_{type}, desc_{key} {}
21
22 [[nodiscard]] const std::string &key() const {
23 return key_;
24 }
25
26 [[nodiscard]] const std::type_index &expected_type() const {
27 return expected_type_;
28 }
29
30 [[nodiscard]] const std::string &description() const {
31 return desc_;
32 }
33
34 void set_description(const std::string &desc) {
35 desc_ = desc;
36 }
37
38 private:
39 std::string key_;
40 std::type_index expected_type_;
41 std::string desc_;
42};
43
44class Operation {
45 public:
46 virtual ~Operation() = default;
47
48 explicit Operation(const gsl::not_null<DiagEngine *> diag) : diag_{diag} {}
49
51 [[nodiscard]] virtual std::vector<ArtifactMetadata> DeclareInputs() const = 0;
52
54 [[nodiscard]] virtual std::vector<ArtifactMetadata> DeclareOutputs() const = 0;
55
56 [[nodiscard]] virtual std::expected<AnyMap, std::string> Execute(const AnyMap &inputs) = 0;
57
58 [[nodiscard]] const DiagEngine &diag() const {
59 return *diag_;
60 }
61
62 [[nodiscard]] const std::string &name() const {
63 return name_;
64 }
65
66 void set_name(const std::string &name) {
67 name_ = name;
68 }
69
70 private:
72 std::string name_;
73};
74
75} // namespace porytiles
ArtifactMetadata provides a POD-like class for Operation to declare input and output artifact info.
Definition operation.hpp:17
ArtifactMetadata(std::string key, const std::type_index type)
Definition operation.hpp:19
void set_description(const std::string &desc)
Definition operation.hpp:34
const std::string & key() const
Definition operation.hpp:22
const std::type_index & expected_type() const
Definition operation.hpp:26
const std::string & description() const
Definition operation.hpp:30
Coordinates the generation and consumption of diagnostic messages.
Operation(const gsl::not_null< DiagEngine * > diag)
Definition operation.hpp:48
virtual std::vector< ArtifactMetadata > DeclareInputs() const =0
Declares the input artifacts required by this operation.
const std::string & name() const
Definition operation.hpp:62
virtual std::vector< ArtifactMetadata > DeclareOutputs() const =0
Declares the artifacts this operation will produce.
void set_name(const std::string &name)
Definition operation.hpp:66
const DiagEngine & diag() const
Definition operation.hpp:58
virtual std::expected< AnyMap, std::string > Execute(const AnyMap &inputs)=0
virtual ~Operation()=default
A smart pointer that represents a non-owning view of a resource.
Definition view_ptr.hpp:16