logplus/Workflow/WFEngine/Module/include/BufferElement.h

217 lines
8.4 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file BufferElement.h
* @brief Buffer中的元素类以及元素的类型
* @author dev
* @date 2011-5-25
*/
#ifndef PAI_FRAME_MODULEAPI_BUFFERELEMENT_H
#define PAI_FRAME_MODULEAPI_BUFFERELEMENT_H
#include <string.h>
#include <iostream>
#include "Turtle.h"
namespace pai {
namespace module {
/**
* @brief
* DeepCopy
* ShallowCopy
*/
enum CopyType
{
DeepCopy, /**< 深拷贝 */
ShallowCopy /**< 深拷贝 */
};
/**
* @brief
* <li>TRACE
* <li>GATHER_ENDMARKER element中的data为空
* <li>LINE_ENDMARKER 线element中的data为空
* GATHER_ENDMARKER线LINE_ENDMARKER标志即可GATHER_ENDMARKER
* <li>DATA_ENDMARKER buffer中所有数据已经写完LINE_ENDMARKER和 GATHER_ENDMARKER DATA_ENDMARKER
* LINE_ENDMARKER和 GATHER_ENDMARKER
*
* @remark ElementType的enum value,flag=3DATA_ENDMARKER
*/
enum ElementType
{
TRACE, /**< 道数据标记 */
GATHER_ENDMARKER, /**< 道集结束标记 */
LINE_ENDMARKER, /**< 线结束标记 */
DATA_ENDMARKER /**< 数据结束标记 */
};
/**
* @class CBufferElement
* @brief buffer中的每个元素data字段只能够存放一个道的数据NULL
*/
class PAI_MODULE_EXPORT CBufferElement
{
private:
CBufferElement(const CBufferElement& element);
CBufferElement& operator=(const CBufferElement& element);
/**
* Factory method must be used to create the BufferElements to avoid
* memory leak and accidental object destruction
*/
CBufferElement();
/**@brief copy constructor
*
*/
CBufferElement(CBufferElement& element, CopyType type);
public:
/**
* @brief
*/
~CBufferElement();
/**
* @brief
* @param[in] data
* @param[in] length sizeof(CTrace)
* @return <code>CBufferElement</code>
**/
static CBufferElement* CreateElement(void* data, int length) {
CBufferElement* element = new CBufferElement();
element->SetData(data, length);
return element;
}
/**
* @brief
* @param[in] element
* @param[in] type CopyType
* @return <code>CBufferElement</code>
**/
static CBufferElement* CreateElement(CBufferElement& element, CopyType type) {
CBufferElement* newElement = new CBufferElement(element,type);
return newElement;
}
/**
* @brief buffer结束标志元素<code>CBuffer</code>
*
* @return <code>CBufferElement</code>
**/
static CBufferElement* CreateEndElement() {
return CreateElement(DATA_ENDMARKER,0,0);
}
/**
* @brief
* @return <code>CBufferElement</code>
**/
static CBufferElement* CreateGatherEndMarker() {
return CreateElement(GATHER_ENDMARKER,0,0);
}
/**
* @brief 线线线线
* @return 线<code>CBufferElement</code>
**/
static CBufferElement* CreateLineEndMarker() {
return CreateElement(LINE_ENDMARKER,0,0);
}
/**
* @brief
* @param[in] type ElementType枚举类型说明
* @param[in] data
* @param[in] length sizeof(CTrace)
* @return <code>CBufferElement</code>
**/
static CBufferElement* CreateElement(ElementType type,void* data=NULL, int length=0) {
CBufferElement* element = CreateElement(data,length);
element->elementType = type;
if(type==TRACE)
{
element->m_bTraceElement = true;
element->isEnd = false;
}
if(type==DATA_ENDMARKER)
{
element->m_bTraceElement = false;
element->isEnd = true;
}
return element;
}
/**
* @brief <code>Elementype</code>TRACE时.
* @return
**/
void* GetData(){ return m_pData; }
/**
* @brief
* @param[in] data
* @param[in] length sizeof(CTrace)
**/
void SetData(void* data, int length);
/**
* @brief
* @return .<code>Elementype</code>TRACE时sizeof(CTrace)
**/
unsigned int GetDataLength() const{ return m_nLength; }
/**
* @brief
* @return true是数据结束标志, false不是数据结束标志
**/
bool IsEndMarker() const{ return elementType==DATA_ENDMARKER ? true:false; }
/**
* @brief
* @return true是道集分割标志, false不是道集分割标志.线true
**/
bool IsGatherSplitMarker() { return elementType!=TRACE; }
/**
* @brief 线
* @return true是线分割标志, false不是线分割标志线true
**/
bool IsLineSplitMarker() { return elementType==LINE_ENDMARKER||elementType==DATA_ENDMARKER; }
/**
* @brief
* @return <code>ElementType</code>
**/
ElementType GetElementType(){return elementType;}
/**
* @deprecated
* @brief
* @return true是道数据, false不是道数据
**/
bool IsTraceElement(){ return elementType==TRACE ? true:false;}
/**
* @deprecated 使SetElementType(TRACE)
* @brief
* @param[in] bTraceElment
**/
void SetTraceElment(bool bTraceElment){ this->m_bTraceElement = bTraceElment;}
/**
* @deprecated 使
* @brief n道数据
* @return truefalse
**/
bool IsNewArrayElement(){ return m_bNewArrayElement;}
/**
* @deprecated 使
* @brief
**/
void SetNewArrayElement(bool bNewArrayElement){ this->m_bNewArrayElement = bNewArrayElement;}
/**
* @brief <code>CBufferElement</code>
*/
void Reset();
private:
void SetAsEndMarker();
ElementType elementType; /** 元素的数据类型 */
public:
bool m_bTraceElement; /**< 元素中存放的数据是否是道数据 */
bool m_bNewArrayElement; /**< 元素中存放的数据是否是数组 */
void* m_pData; /**< 元素中存放的数据 */
unsigned int m_nLength; /**< 元素中数据的长度 */
bool isEnd; /**< 是否是道集、线、数据的结束 */
friend class CBuffer; /**< 友元类 */
};
}
}
#endif