You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kev/Drawer/Module/GeoSigmaDraw/StreamingTsvParser.h

31 lines
797 B
C

1 month ago
#pragma once
#include <string>
#include <vector>
#include <functional>
/**
* @brief TSV
*/
class StreamingTsvParser
{
public:
/// lineIndex 0 = 表头行之后为数据行fields 为该行按 Tab 分割的字段UTF-8
using LineCallback = std::function<void(int lineIndex, const std::vector<std::string>& fields)>;
void SetCallback(LineCallback cb) { m_callback = std::move(cb); }
/// 喂入一块数据,可能触发多次 OnLine 回调
void Feed(const void* data, size_t size);
/// 结束:处理缓冲区中剩余内容作为最后一行(若有)
void End();
private:
void ProcessBuffer();
std::string m_buffer;
int m_lineIndex = 0;
LineCallback m_callback;
};