#pragma once #include "SampleBuffer.h" #include #include #include #include #include #include class BufferManager { public: struct ChannelStat { uint32_t id; size_t size; int64_t earliestTs; int64_t latestTs; }; public: BufferManager(uint32_t id, std::string name, RetentionPolicy defaultPolicy = {}); // ±êʶ uint32_t id() const { return id_; } std::string name() const; void rename(const std::string& newName); // ²É¼¯¿ØÖÆ void start(); void stop(); bool isRunning() const { return running_.load(); } void clearAll(); // Êý¾Ýд¶Á void push(uint32_t channelId, int64_t ts_ms, double v); std::vector getSince(uint32_t channelId, int64_t tsExclusive, size_t maxCount = 4096) const; std::vector getRange(uint32_t channelId, int64_t from_ts, int64_t to_ts, size_t maxCount = 4096) const; // ²ßÂÔ void setDefaultPolicy(const RetentionPolicy& p, bool applyToExisting = false); void setPolicy(uint32_t channelId, const RetentionPolicy& p); RetentionPolicy getPolicy(uint32_t channelId) const; // ͨµÀ¹ÜÀí std::vector listChannels() const; // ===== ÐÂÔö£ºÍ¨µÀ£¨ÇúÏߣ©Ãû³Æ ===== void setChannelName(uint32_t channelId, const std::string& name); // ÉèÖÃ/¸üРstd::string getChannelName(uint32_t channelId) const; // ÈôδÉèÖ㬷µ»Ø "Ch-" struct ChannelInfo { uint32_t id; std::string name; }; std::vector listChannelInfos() const; // ·½±ã UI Áбí std::vector listChannelStats() const; // µ¥¸öͨµÀ ChannelStat getChannelStat(uint32_t channelId) const; private: SampleBuffer& getOrCreate(uint32_t channelId); mutable std::shared_mutex mtx_; std::unordered_map> map_; // ===== ÐÂÔö£ºÍ¨µÀÃû³Æ±í ===== std::unordered_map channelNames_; uint32_t id_; std::string name_; RetentionPolicy defPolicy_; std::atomic running_{ false }; };