#ifndef FESA_MODEL_DOMAIN_H_ #define FESA_MODEL_DOMAIN_H_ #include #include #include #include "fesa/core/status.h" #include "fesa/model/model_types.h" namespace fesa { /// @brief Owns the complete immutable semantic model definition. /// @note Collection positions remain stable internal indices after /// construction. class Domain { public: /// @brief Creates a Domain that owns a copy or moved model definition. /// @param definition Complete parsed semantic records in declaration order. /// @return A successful owning Domain. static Result Create(ModelDefinition definition); /// @brief Returns nodes in stable declaration order. const std::vector& Nodes() const noexcept; /// @brief Returns Euler beam definitions in stable declaration order. const std::vector& Elements() const noexcept; /// @brief Returns MITC4 shell definitions in stable declaration order. const std::vector& ShellElements() const noexcept; /// @brief Returns materials in stable declaration order. const std::vector& Materials() const noexcept; /// @brief Returns beam sections in stable declaration order. const std::vector& Sections() const noexcept; /// @brief Returns shell sections in stable declaration order. const std::vector& ShellSections() const noexcept; /// @brief Returns preprocessed shell-node frames in stable node order. const std::vector& ShellNodeInitialFrames() const noexcept; /// @brief Returns node sets in stable declaration order. const std::vector& NodeSets() const noexcept; /// @brief Returns element sets in stable declaration order. const std::vector& ElementSets() const noexcept; /// @brief Returns static steps in stable declaration order. const std::vector& Steps() const noexcept; /// @brief Returns sorted nonfatal mapping diagnostics. const std::vector& Warnings() const noexcept; /// @brief Returns the source input path associated with this model. const std::filesystem::path& SourcePath() const noexcept; /// @brief Returns the deterministic source-content identity. const std::string& SourceContentIdentity() const noexcept; private: /// @brief Takes ownership of an already constructed model definition. explicit Domain(ModelDefinition definition); ModelDefinition definition_; }; } // namespace fesa #endif // FESA_MODEL_DOMAIN_H_