#pragma once #include "types/collection_duration.hpp" #include "types/collection_time_scope.hpp" #include "types/duration_types.hpp" #include "types/operation_type.hpp" #include <memory> #include <optional> #include <vector> namespace metrics { class CollectionData { public: virtual ~CollectionData() = default; virtual std::optional<double> update(Milliseconds timestamp) = 0; virtual double update(Milliseconds timestamp, double value) = 0; bool updateLastValue(double value); private: std::optional<double> lastValue; }; std::vector<std::unique_ptr<CollectionData>> makeCollectionData(size_t size, OperationType, CollectionTimeScope, CollectionDuration); } // namespace metrics