/** * @RDE_HEADER@ * Exercise * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, SLSE, 2017-11-30 */ #include "exercise.h" #include #include namespace AudioVideoManagement { void Exercise::add(std::unique_ptr &&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) { 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 Exercise::take(Asset *asset) { Q_ASSERT(asset); auto found = m_assets.find(asset->data().id()); Q_ASSERT(found != m_assets.end()); std::unique_ptr taken = std::move(found->second); m_assets.erase(found); return taken; } std::unique_ptr Exercise::take(MountingPoint *mountingPoint) { Q_ASSERT(mountingPoint); auto found = m_mountingPoints.find(mountingPoint->data().id()); Q_ASSERT(found != m_mountingPoints.end()); std::unique_ptr taken = std::move(found->second); m_mountingPoints.erase(found); return taken; } void Exercise::moveMountedTo(Asset *asset, Exercise *targetExercise, const boost::optional &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 Exercise::assets() const { std::vector 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