1 #ifndef CTL_ABSTRACTDATAMODEL_H 2 #define CTL_ABSTRACTDATAMODEL_H 5 #include "copyableuniqueptr.h" 60 public:virtual
float valueAt(
float position) const = 0;
73 const QString&
name() const;
113 public:
virtual float binIntegral(
float position,
float binWidth)
const = 0;
119 float meanValue(
float position,
float binWidth)
const;
130 std::shared_ptr<AbstractIntegrableDataModel>
131 operator+(std::shared_ptr<AbstractIntegrableDataModel> lhs,
132 std::shared_ptr<AbstractIntegrableDataModel> rhs);
133 std::shared_ptr<AbstractIntegrableDataModel>
134 operator-(std::shared_ptr<AbstractIntegrableDataModel> lhs,
135 std::shared_ptr<AbstractIntegrableDataModel> rhs);
136 std::shared_ptr<AbstractIntegrableDataModel>&
137 operator+=(std::shared_ptr<AbstractIntegrableDataModel>& lhs,
138 const std::shared_ptr<AbstractIntegrableDataModel>& rhs);
139 std::shared_ptr<AbstractIntegrableDataModel>&
140 operator-=(std::shared_ptr<AbstractIntegrableDataModel>& lhs,
141 const std::shared_ptr<AbstractIntegrableDataModel>& rhs);
144 template <
typename DataModel1,
typename DataModel2>
145 auto operator+(std::shared_ptr<DataModel1> lhs, std::shared_ptr<DataModel2> rhs) ->
146 typename std::enable_if<
147 std::is_convertible<DataModel1*, AbstractIntegrableDataModel*>::value
148 && std::is_convertible<DataModel2*, AbstractIntegrableDataModel*>::value,
149 std::shared_ptr<AbstractIntegrableDataModel>>
::type 151 return std::shared_ptr<AbstractIntegrableDataModel>(std::move(lhs))
152 + std::shared_ptr<AbstractIntegrableDataModel>(std::move(rhs));
154 template <
typename DataModel1,
typename DataModel2>
155 auto operator-(std::shared_ptr<DataModel1> lhs, std::shared_ptr<DataModel2> rhs) ->
156 typename std::enable_if<
157 std::is_convertible<DataModel1*, AbstractIntegrableDataModel*>::value
158 && std::is_convertible<DataModel2*, AbstractIntegrableDataModel*>::value,
159 std::shared_ptr<AbstractIntegrableDataModel>>
::type 161 return std::shared_ptr<AbstractIntegrableDataModel>(std::move(lhs))
162 - std::shared_ptr<AbstractIntegrableDataModel>(std::move(rhs));
166 template <
class ModelType,
class =
167 typename std::enable_if<std::is_convertible<ModelType*, AbstractDataModel*>::value>
::type>
173 template <
typename ModelType,
typename... ConstructorArguments>
175 typename std::enable_if<std::is_convertible<ModelType*, AbstractDataModel*>::value,
176 std::unique_ptr<ModelType>>
::type 178 return std::unique_ptr<ModelType>(
179 new ModelType(std::forward<ConstructorArguments>(arguments)...));
224 #endif // CTL_ABSTRACTDATAMODEL_H virtual AbstractDataModel * clone() const =0
void setName(const QString &name)
Definition: abstractdatamodel.cpp:14
DataModelPtr
Template alias name for CopyableUniquePtr<ModelType> to a suitable ModelType.
virtual void setParameter(const QVariant ¶meter)
Definition: abstractdatamodel.cpp:12
const QString & name() const
Definition: abstractdatamodel.cpp:16
Specify an interface for de-/serialization from/to QVariants.
Definition: serializationinterface.h:17
virtual float valueAt(float position) const =0
The AbstractDataModel class is the base class for basic data models.
Definition: abstractdatamodel.h:55
bool isIntegrable() const
Definition: abstractdatamodel.cpp:50
std::unique_ptr< ModelType > makeDataModel(ConstructorArguments &&... arguments)
Definition: abstractdatamodel.h:174
#define CTL_TYPE_ID(newIndex)
Definition: serializationinterface.h:189
virtual QVariant parameter() const
Definition: abstractdatamodel.cpp:10
void fromVariant(const QVariant &variant) override
Definition: abstractdatamodel.cpp:31
int type() const override
Definition: abstractdatamodel.h:57
AbstractDataModelPtr
Alias name for DataModelPtr<AbstractDataModel>.
The AbstractIntegrableDataModel class is the base class for data models that provide a means to integ...
Definition: abstractdatamodel.h:110
QVariant toVariant() const override
Definition: abstractdatamodel.cpp:19