Porytiles
Loading...
Searching...
No Matches
struct_initializer_declaration.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
4#include <string>
5#include <vector>
6
9
10namespace porytiles {
11
36 public:
44 std::string struct_type,
45 std::string variable_name,
46 std::vector<DesignatedInitializerField> fields,
48 : struct_type_{std::move(struct_type)}, variable_name_{std::move(variable_name)}, fields_{std::move(fields)},
49 position_{position}
50 {
51 }
52
56 [[nodiscard]] const std::string &struct_type() const
57 {
58 return struct_type_;
59 }
60
64 [[nodiscard]] const std::string &variable_name() const
65 {
66 return variable_name_;
67 }
68
72 [[nodiscard]] const std::vector<DesignatedInitializerField> &fields() const
73 {
74 return fields_;
75 }
76
80 [[nodiscard]] const SourcePosition &position() const
81 {
82 return position_;
83 }
84
89 [[nodiscard]] std::optional<std::string> field_value(const std::string &field_name) const
90 {
91 for (const auto &field : fields_) {
92 if (field.field_name() == field_name) {
93 return field.value();
94 }
95 }
96 return std::nullopt;
97 }
98
99 private:
100 std::string struct_type_;
101 std::string variable_name_;
102 std::vector<DesignatedInitializerField> fields_;
103 SourcePosition position_;
104};
105
106} // namespace porytiles
Represents a parsed C struct variable declaration with its initializer fields.
const std::vector< DesignatedInitializerField > & fields() const
Returns all designated initializer fields.
const std::string & struct_type() const
Returns the struct type name.
const SourcePosition & position() const
Returns the source position of the variable name.
std::optional< std::string > field_value(const std::string &field_name) const
Looks up the value of a field by name.
StructInitializerDeclaration(std::string struct_type, std::string variable_name, std::vector< DesignatedInitializerField > fields, SourcePosition position)
Constructs a StructInitializerDeclaration.
const std::string & variable_name() const
Returns the variable name.
Represents a position within source content.