feat(cpp-object-oriented-modular-refactoring): step 18 - load-hierarchy

This commit is contained in:
KOKO\Mimi
2026-08-16 10:56:57 +09:00
parent 08d352ae46
commit 9ad72e6d21
18 changed files with 705 additions and 137 deletions
+64 -1
View File
@@ -8,10 +8,14 @@
#include <vector>
#include "fesa/core/status.h"
#include "fesa/loads/concentrated_nodal_load.h"
#include "fesa/loads/load.h"
#include "fesa/model/model_types.h"
namespace fesa {
class StepDefinition;
/// @brief Exposes immutable references without transferring Domain ownership.
/// @tparam T Base or concrete semantic type stored by the Domain.
template <class T>
@@ -33,6 +37,7 @@ class DomainCollectionView {
private:
friend class Domain;
friend class StepDefinition;
/// @brief Adds one reference while the owning Domain candidate is built.
void Add(const T& entry) { entries_.push_back(&entry); }
@@ -40,6 +45,62 @@ class DomainCollectionView {
std::vector<const T*> entries_;
};
/// @brief Owns one immutable static-step semantic definition.
/// @note Loads retain source order and are owned polymorphically by unique
/// pointers.
class StepDefinition {
public:
StepDefinition(const StepDefinition&) = delete;
StepDefinition& operator=(const StepDefinition&) = delete;
StepDefinition(StepDefinition&&) noexcept = default;
StepDefinition& operator=(StepDefinition&&) noexcept = default;
/// @brief Returns the source step name.
const std::string& Name() const noexcept;
/// @brief Returns current boundary records in declaration order.
const std::vector<BoundaryCondition>& Boundaries() const noexcept;
/// @brief Returns polymorphic loads in stable source order.
const LoadView& Loads() const noexcept;
/// @brief Returns current concentrated loads in stable source order.
const DomainCollectionView<ConcentratedNodalLoad>& ConcentratedLoads()
const noexcept;
/// @brief Returns the static initial increment provenance value.
double InitialIncrement() const noexcept;
/// @brief Returns the static time-period provenance value.
double TimePeriod() const noexcept;
/// @brief Returns the static minimum-increment provenance value.
double MinimumIncrement() const noexcept;
/// @brief Returns the static maximum-increment provenance value.
double MaximumIncrement() const noexcept;
/// @brief Returns the source location of the step declaration.
const SourceLocation& Location() const noexcept;
private:
friend class Domain;
/// @brief Converts one parsed static-step record to owned semantic objects.
explicit StepDefinition(StaticStepDefinition definition);
std::string name_;
std::vector<BoundaryCondition> boundaries_;
std::vector<std::unique_ptr<Load>> loads_;
LoadView loads_view_;
DomainCollectionView<ConcentratedNodalLoad> concentrated_loads_view_;
double initial_increment_;
double time_period_;
double minimum_increment_;
double maximum_increment_;
SourceLocation location_;
};
/// @brief Owns the complete immutable semantic model definition.
/// @note Collection positions remain stable internal indices after
/// construction.
@@ -96,7 +157,7 @@ class Domain {
const std::vector<ElementSet>& ElementSets() const noexcept;
/// @brief Returns static steps in stable declaration order.
const std::vector<StaticStepDefinition>& Steps() const noexcept;
const DomainCollectionView<StepDefinition>& Steps() const noexcept;
/// @brief Returns sorted nonfatal mapping diagnostics.
const std::vector<Diagnostic>& Warnings() const noexcept;
@@ -115,6 +176,7 @@ class Domain {
std::vector<std::unique_ptr<ElementDefinition>> element_definitions_;
std::vector<std::unique_ptr<ElementProperty>> element_properties_;
std::vector<std::unique_ptr<Material>> materials_;
std::vector<std::unique_ptr<StepDefinition>> step_definitions_;
DomainCollectionView<ElementDefinition> elements_view_;
DomainCollectionView<EulerBeam3DDefinition> beam_elements_view_;
DomainCollectionView<Mitc4ShellDefinition> shell_elements_view_;
@@ -123,6 +185,7 @@ class Domain {
DomainCollectionView<ShellSection> shell_sections_view_;
DomainCollectionView<Material> materials_view_;
DomainCollectionView<LinearElasticMaterial> linear_materials_view_;
DomainCollectionView<StepDefinition> steps_view_;
};
} // namespace fesa