feat(cpp-object-oriented-modular-refactoring): step 12 - material-property-hierarchy

This commit is contained in:
KOKO\Mimi
2026-08-16 08:48:18 +09:00
parent ec9c3e250a
commit 64a7071986
14 changed files with 746 additions and 31 deletions
+57
View File
@@ -0,0 +1,57 @@
#ifndef FESA_PROPERTIES_SHELL_SECTION_H_
#define FESA_PROPERTIES_SHELL_SECTION_H_
#include <string>
#include "fesa/core/status.h"
#include "fesa/properties/element_property.h"
namespace fesa {
/// @brief Stores a centered constant-thickness shell section assignment.
class ShellSection final : public ElementProperty {
public:
/// @brief Creates a validated shell section.
/// @param thickness Positive thickness in the active consistent unit system.
/// @param material_index Stable Domain material collection position.
/// @return A section or a structured model failure.
static Result<ShellSection> Create(SourceEntityId source_id, std::string name,
double thickness,
EntityIndex material_index,
SourceLocation location);
/// @brief Constructs an already validated parser-owned shell record.
/// @note This compatibility seam preserves current consumers until Domain
/// polymorphic ownership is migrated.
ShellSection(std::string name, double thickness, EntityIndex material_index,
SourceLocation location);
ElementPropertyKind Kind() const noexcept override;
const SourceEntityId& SourceId() const noexcept override;
const SourceLocation& Location() const noexcept override;
/// @brief Returns the source shell-section name.
const std::string& Name() const noexcept;
/// @brief Returns centered shell thickness.
double Thickness() const noexcept;
/// @brief Returns the stable Domain material collection position.
EntityIndex MaterialIndex() const noexcept;
// Public storage preserves the current semantic-record API until Domain
// ownership migrates in the next approved Step.
std::string name;
double thickness;
EntityIndex material_index;
SourceLocation location;
private:
/// @brief Constructs a candidate whose fields have already been checked.
ShellSection(SourceEntityId source_id, std::string name, double thickness,
EntityIndex material_index, SourceLocation location);
SourceEntityId source_id_;
};
} // namespace fesa
#endif // FESA_PROPERTIES_SHELL_SECTION_H_