Work on requirements management

This commit is contained in:
Sylvain Schneider
2026-03-13 10:23:40 +01:00
parent 16787ac642
commit 25fc14d6bd
9 changed files with 259 additions and 65 deletions

View File

@@ -0,0 +1,38 @@
#pragma once
#include <api/requirement.h>
#include <memory>
#include <vector>
namespace core::project
{
class RequirementManager;
//--------------------------------------------------------------
class RequirementItem : public std::enable_shared_from_this<RequirementItem>
, public api::requirement::Requirement
{
using RequirementItemPtr = std::shared_ptr<RequirementItem>;
public:
RequirementItem() = delete; // Default constructor
virtual ~RequirementItem() = default; // Default destructor
RequirementItem(const RequirementItem &obj) = delete; // Copy constructor
RequirementItem(RequirementItem &&obj) noexcept = delete; // Move constructor
RequirementItem &operator=(const RequirementItem &obj) = delete; // Copy assignment operator
RequirementItem &operator=(RequirementItem &&obj) noexcept = delete; // Move assignment operator
explicit RequirementItem(RequirementManager &manager, // Constructor
const std::shared_ptr<RequirementItem> &parentRequirement = nullptr);
// Children management functions
void appendChild(const api::requirement::Requirement &child); // Append a child requirement item to this requirement item
void removeChild(const std::string &childUuid); // Remove a child requirement item from this requirement item by its UUID
[[nodiscard]] std::vector<RequirementItemPtr> getChildren() const; // Get the vector of child requirement items of this requirement item
protected:
RequirementManager &m_requirementManager; // Reference to the requirement manager that owns this requirement item
std::weak_ptr<RequirementItem> m_parent; // Weak pointer to the m_parent requirement item (nullptr for root)
std::vector<RequirementItemPtr> m_children; // Vector of shared pointers to child requirement items
};
//--------------------------------------------------------------
} // namespace core::project