12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // // ******************************************************************
- // // /\ /| @File ProtocolDecodeBase.h
- // // \ V/ @Brief
- // // | "") @Author lijinwen, ghz005@uni-trend.com.cn
- // // / | @Creation 2024-5-6
- // // / \\ @Modified 2024-5-13
- // // *(__\_\
- // // ******************************************************************
- #pragma once
- #include <iostream>
- #include <memory>
- #include <thread>
- #include <atomic>
- #include <vector>
- #include <string>
- #include <stdexcept>
- #include "DecodeResult.h"
- #include "BaseEnums/ProtocolEnums.h"
- #include "BaseHelper/Logger.h"
- namespace Protocol
- {
- class QuantizeParams;
- struct DecodeParams;
- class ProtocolDecodeBase
- {
- public:
- virtual ~ProtocolDecodeBase();
- // 解码接口,异步调用
- //解码过程
- void DecodeAsync(const DecodeParams* decodeParams);
- //带整型的解码过程
- void QuantizeDecodeAsync(const QuantizeParams& decodeParams);
- // 取消解码
- void Cancel();
- // 获取解码状态
- ProtocolStatus GetStatus() const;
- virtual DecodeResult* GetResult();
-
- protected:
- // 真正的解码逻辑,由子类实现
- //解码过程
- virtual void Decode(const DecodeParams* decodeParams);
- //带整型的解码过程
- virtual void QuantizeDecode(const QuantizeParams& decode_params);
- std::atomic<bool> canceled_; // 取消标志
- ProtocolStatus status_ = ProtocolStatus::Canceled; // 解码状态
- // 子类可以设置自己的私有枚举和数据结构
- //....//
- private:
- std::thread decode_thread_; // 解码线程
- };
- //外部调用
- extern "C" {
- inline __declspec(dllexport) void DeleteProtocolBase(const ProtocolDecodeBase* base)
- {
- delete base; // 确保提供一个删除函数,以便C代码可以正确释放内存
- }
- inline __declspec(dllexport) void DecodeAsyncExport(ProtocolDecodeBase* decoder, const DecodeParams* decodeParams)
- {
- return decoder->DecodeAsync(decodeParams);
- }
- inline __declspec(dllexport) uint32_t GetStatusExport(const ProtocolDecodeBase* decoder)
- {
- return static_cast<uint32_t>(decoder->GetStatus());
- }
- inline __declspec(dllexport) DecodeResult* GetResultExport(ProtocolDecodeBase* decoder)
- {
- return decoder->GetResult();
- }
-
- }
- }
|