#ifndef SCIQLOP_VARIABLE_H #define SCIQLOP_VARIABLE_H #include "CoreGlobal.h" #include #include #include #include #include #include Q_DECLARE_LOGGING_CATEGORY(LOG_Variable) class IDataSeries; class QString; /** * @brief The Variable class represents a variable in SciQlop. */ class SCIQLOP_CORE_EXPORT Variable : public QObject { Q_OBJECT public: explicit Variable(const QString &name, const SqpRange &dateTime, const QVariantHash &metadata = {}); QString name() const noexcept; SqpRange range() const noexcept; void setRange(const SqpRange &range) noexcept; SqpRange cacheRange() const noexcept; void setCacheRange(const SqpRange &cacheRange) noexcept; /// Returns the real range of the variable, i.e. the min and max x-axis values of the data /// series between the range of the variable. The real range is updated each time the variable /// range or the data series changed /// @return the real range, invalid range if the data series is null or empty /// @sa setDataSeries() /// @sa setRange() SqpRange realRange() const noexcept; /// @return the data of the variable, nullptr if there is no data std::shared_ptr dataSeries() const noexcept; QVariantHash metadata() const noexcept; bool contains(const SqpRange &range) const noexcept; bool intersect(const SqpRange &range) const noexcept; bool isInside(const SqpRange &range) const noexcept; bool cacheContains(const SqpRange &range) const noexcept; bool cacheIntersect(const SqpRange &range) const noexcept; bool cacheIsInside(const SqpRange &range) const noexcept; QVector provideNotInCacheRangeList(const SqpRange &range) const noexcept; QVector provideInCacheRangeList(const SqpRange &range) const noexcept; void setDataSeries(std::shared_ptr dataSeries) noexcept; void mergeDataSeries(std::shared_ptr dataSeries) noexcept; signals: void updated(); private: class VariablePrivate; spimpl::unique_impl_ptr impl; }; // Required for using shared_ptr in signals/slots SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_REGISTRY, std::shared_ptr) SCIQLOP_REGISTER_META_TYPE(VARIABLE_PTR_VECTOR_REGISTRY, QVector >) #endif // SCIQLOP_VARIABLE_H