/** * @RDE_HEADER@ * ExerciseContext * $Id$ * $HeadURL$ * $Author$ * Created by Christian Fröbel, SLSE, 2017-11-22 */ #pragma once #include "avm_export.h" #include #include #include class QString; class QByteArray; namespace AudioVideoManagement { /** * Small value class in order to handle the exercise context (string) used in AVS. * Such a context is associated with an exercise ID used by our system. * But AVS also has the notion of a default context named "default" * which has no associated ID on our side. * * @author Christian Fröbel */ class AVM_COMMON_EXPORT ExerciseContext { public: explicit ExerciseContext(int exerciseId) : m_exerciseId(exerciseId) { //Q_ASSERT(exerciseId > 0); } static ExerciseContext defaultContext() { return ExerciseContext(); } static ExerciseContext fromByteArray(const QByteArray &s); static ExerciseContext fromString(const QString &s); bool isDefault() const { return !m_exerciseId.is_initialized(); } /** May only be called if this is not the "default" context. */ int id() const { return *m_exerciseId; } QString toString() const; QByteArray toByteArray() const; bool operator==(const ExerciseContext &other) const { return m_exerciseId == other.m_exerciseId; } bool operator!=(const ExerciseContext &other) const { return !(*this == other); } bool operator<(const ExerciseContext &other) const; private: /** Create the "default" AVS context. */ ExerciseContext() = default; boost::optional m_exerciseId; //!< not set for "default" context }; AVM_COMMON_EXPORT std::ostream &operator<<(std::ostream &os, const ExerciseContext &ctx); } // namespace AudioVideoManagement