From e8a27bb203fe2aff70390a5eca002d7438da9b0f Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 22 十月 2025 14:24:34 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/DAQBridge/buffer/BufferManager.h | 72 ++++++++++++++++++++++++++++++++++++
1 files changed, 72 insertions(+), 0 deletions(-)
diff --git a/SourceCode/Bond/DAQBridge/buffer/BufferManager.h b/SourceCode/Bond/DAQBridge/buffer/BufferManager.h
new file mode 100644
index 0000000..564e16b
--- /dev/null
+++ b/SourceCode/Bond/DAQBridge/buffer/BufferManager.h
@@ -0,0 +1,72 @@
+#pragma once
+#include "SampleBuffer.h"
+#include <unordered_map>
+#include <memory>
+#include <shared_mutex>
+#include <string>
+#include <atomic>
+#include <vector>
+
+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<Sample> getSince(uint32_t channelId, int64_t tsExclusive, size_t maxCount = 4096) const;
+ std::vector<Sample> 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<uint32_t> listChannels() const;
+
+ // ===== 新增:通道(曲线)名称 =====
+ void setChannelName(uint32_t channelId, const std::string& name); // 设置/更新
+ std::string getChannelName(uint32_t channelId) const; // 若未设置,返回 "Ch-<id>"
+ struct ChannelInfo { uint32_t id; std::string name; };
+ std::vector<ChannelInfo> listChannelInfos() const; // 方便 UI 列表
+
+ std::vector<ChannelStat> listChannelStats() const;
+ // 单个通道
+ ChannelStat getChannelStat(uint32_t channelId) const;
+private:
+ SampleBuffer& getOrCreate(uint32_t channelId);
+
+ mutable std::shared_mutex mtx_;
+ std::unordered_map<uint32_t, std::unique_ptr<SampleBuffer>> map_;
+
+ // ===== 新增:通道名称表 =====
+ std::unordered_map<uint32_t, std::string> channelNames_;
+
+ uint32_t id_;
+ std::string name_;
+ RetentionPolicy defPolicy_;
+ std::atomic<bool> running_{ false };
+
+
+
+
+};
--
Gitblit v1.9.3