blob: 945a030e3b2886f221d6104ee470bcdb729f427a [file] [log] [blame]
#ifndef BASYX_SUBMODEL_API_V2_COMMON_IELEMENTCONTAINER_H
#define BASYX_SUBMODEL_API_V2_COMMON_IELEMENTCONTAINER_H
#include <BaSyx/submodel/api_v2/submodelelement/ISubmodelElement.h>
#include <BaSyx/util/util.h>
#include <memory>
namespace basyx {
namespace submodel {
namespace api {
template<class IElementType>
class IElementContainer
{
public:
using elementPtr_t = std::unique_ptr<IElementType>;
public:
virtual ~IElementContainer() = 0;
virtual IElementType * const getElement(const std::string & idShort) const = 0;
virtual IElementType * const getElement(std::size_t n) const = 0;
virtual void addElement(elementPtr_t element) = 0;
virtual std::size_t size() const = 0;
template<typename SubElement_t, typename... Args>
SubElement_t * createElement(Args && ... args)
{
auto ptr = util::make_unique<SubElement_t>(std::forward<Args>(args)...);
auto ret = ptr.get();
this->addElement(std::move(ptr));
return ret;
};
};
template<class IElementType>
inline IElementContainer<IElementType>::~IElementContainer() = default;
}
}
}
#endif /* BASYX_SUBMODEL_API_V2_COMMON_IELEMENTCONTAINER_H */