Files
qt5-legatus-legacy/Lts/Services/AudioVideoManagement/exercise.cpp
T
2026-08-13 18:33:10 +02:00

96 lines
2.3 KiB
C++
Executable File

/**
* @RDE_HEADER@
* Exercise
* $Id$
* $HeadURL$
* $Author$
* Created by Christian Fröbel, SLSE, 2017-11-30
*/
#include "exercise.h"
#include <InfrastructureManagement/ism.hpp>
#include <QtGlobal>
namespace AudioVideoManagement
{
void Exercise::add(std::unique_ptr<Asset> &&asset)
{
Q_ASSERT(asset.get());
auto insertResult = m_assets.insert(std::make_pair(asset->data().id(), std::move(asset)));
Q_ASSERT(insertResult.second);
}
void Exercise::add(std::unique_ptr<MountingPoint> &&mountingPoint)
{
Q_ASSERT(mountingPoint.get());
auto insertResult = m_mountingPoints.insert(std::make_pair(mountingPoint->data().id(), std::move(mountingPoint)));
Q_ASSERT(insertResult.second);
}
std::unique_ptr<Asset> Exercise::take(Asset *asset)
{
Q_ASSERT(asset);
auto found = m_assets.find(asset->data().id());
Q_ASSERT(found != m_assets.end());
std::unique_ptr<Asset> taken = std::move(found->second);
m_assets.erase(found);
return taken;
}
std::unique_ptr<MountingPoint> Exercise::take(MountingPoint *mountingPoint)
{
Q_ASSERT(mountingPoint);
auto found = m_mountingPoints.find(mountingPoint->data().id());
Q_ASSERT(found != m_mountingPoints.end());
std::unique_ptr<MountingPoint> taken = std::move(found->second);
m_mountingPoints.erase(found);
return taken;
}
void Exercise::moveMountedTo(Asset *asset, Exercise *targetExercise, const boost::optional<InfrastructureManagement::InstrumentationAsset> &modifiedData)
{
Q_ASSERT(asset);
Q_ASSERT(targetExercise);
targetExercise->add(take(asset));
targetExercise->add(take(asset->mountingPoint()));
emit assetUnassigned(asset);
if (modifiedData)
asset->update(*modifiedData);
emit targetExercise->assetAssigned(asset);
}
Asset *Exercise::findAsset(int id)
{
auto found = m_assets.find(id);
if (found != m_assets.end())
return found->second.get();
else
return nullptr;
}
std::vector<Asset *> Exercise::assets() const
{
std::vector<Asset *> allAssets;
allAssets.reserve(m_assets.size());
for (const auto &exerciseAndAsset: m_assets)
allAssets.push_back(exerciseAndAsset.second.get());
return allAssets;
}
MountingPoint *Exercise::findMountingPoint(int id)
{
auto found = m_mountingPoints.find(id);
if (found != m_mountingPoints.end())
return found->second.get();
else
return nullptr;
}
} // namespace AudioVideoManagement