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
38 public:
48 std::string struct_type,
49 std::string variable_name,
50 std::vector<DesignatedInitializerField> fields,
52 : struct_type_{std::move(struct_type)}, variable_name_{std::move(variable_name)}, fields_{std::move(fields)},
53 position_{position}
54 {
55 }
56
62 [[nodiscard]] const std::string &struct_type() const
63 {
64 return struct_type_;
65 }
66
72 [[nodiscard]] const std::string &variable_name() const
73 {
74 return variable_name_;
75 }
76
82 [[nodiscard]] const std::vector<DesignatedInitializerField> &fields() const
83 {
84 return fields_;
85 }
86
92 [[nodiscard]] const SourcePosition &position() const
93 {
94 return position_;
95 }
96
103 [[nodiscard]] std::optional<std::string> field_value(const std::string &field_name) const
104 {
105 for (const auto &field : fields_) {
106 if (field.field_name() == field_name) {
107 return field.value();
108 }
109 }
110 return std::nullopt;
111 }
112
113 private:
114 std::string struct_type_;
115 std::string variable_name_;
116 std::vector<DesignatedInitializerField> fields_;
117 SourcePosition position_;
118};
119
120} // 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.