用于EagleEye3.0 规则集漏报和误报测试的示例项目,项目收集于github和gitee
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

146 lines
3.2 KiB

/**
* Copyright (C) 2014-2050
* All rights reserved.
*
* @file Sobject.hpp
* @brief
* @version v1.0
* @author SOUI group
* @date 2014/08/01
*
* Describe the base class used in SOUI, which provides type identify of class in runtime
* and implement attributes dispatcher described in XML.
*/
#pragma once
#include "sobject-i.h"
namespace SOUI
{
#pragma warning(push)
#pragma warning (disable : 4231)
#pragma warning (disable : 4251)
template<class T>
class SObjectImpl : public T
{
public:
HRESULT DefAttributeProc(const SStringW & strAttribName, const SStringW & strValue, BOOL bLoading)
{
UNREFERENCED_PARAMETER(strAttribName);
UNREFERENCED_PARAMETER(strValue);
UNREFERENCED_PARAMETER(bLoading);
return E_FAIL;
}
BOOL InitFromXml(pugi::xml_node xmlNode)
{
if (!xmlNode) return FALSE;
#if defined(_DEBUG) && defined(PUGIXML_WCHAR_MODE)
{
pugi::xml_writer_buff writer;
xmlNode.print(writer, L"\t", pugi::format_default, pugi::encoding_utf16);
m_strXml = SStringW(writer.buffer(), writer.size());
}
#endif
//设置当前对象的属性
for (pugi::xml_attribute attr = xmlNode.first_attribute(); attr; attr = attr.next_attribute())
{
if (T::IsAttributeHandled(attr)) continue; //忽略已经被预处理的属性
SetAttribute(attr.name(), attr.value(), TRUE);
}
//调用初始化完成接口
OnInitFinished(xmlNode);
return TRUE;
}
LPCWSTR GetName() const
{
return NULL;
}
int GetID() const
{
return 0;
}
HRESULT AfterAttribute(const SStringW & strAttribName, const SStringW & strValue, BOOL bLoading, HRESULT hr)
{
UNREFERENCED_PARAMETER(strAttribName);
UNREFERENCED_PARAMETER(strValue);
UNREFERENCED_PARAMETER(bLoading);
return hr;
}
HRESULT SetAttribute(const SStringW & strAttribName, const SStringW & strValue, BOOL bLoading)
{
return DefAttributeProc(strAttribName, strValue, bLoading);
}
HRESULT SetAttribute(const SStringA & strAttribName, const SStringA & strValue, BOOL bLoading)
{
return SetAttribute(S_CA2W(strAttribName), S_CA2W(strValue), bLoading);
}
HRESULT SetAttribute(const char* strAttribName, const char* strValue, BOOL bLoading)
{
return SetAttribute(S_CA2W(strAttribName), S_CA2W(strValue), bLoading);
}
LPCWSTR GetObjectClass() const
{
return NULL;
}
int GetObjectType() const
{
return 0;
}
BOOL IsClass(LPCWSTR lpszName) const
{
UNREFERENCED_PARAMETER(lpszName);
return FALSE;
}
SStringW GetAttribute(const SStringW & strAttr) const{
UNREFERENCED_PARAMETER(strAttr);
return SStringW();
}
/**
* OnInitFinished
* @brief 属性初始化完成处理接口
* @param pugi::xml_node xmlNode -- 属性节点
* @return void
* Describe
*/
void OnInitFinished(pugi::xml_node xmlNode) {
UNREFERENCED_PARAMETER(xmlNode);
}
#ifdef _DEBUG
public:
SStringW m_strXml; //<** XML字符串,用于在调试时观察对象*/
#endif//_DEBUG
};
#ifdef UTILITIES_EXPORTS
# define EXPIMP_TEMPLATE
#else
# define EXPIMP_TEMPLATE extern
#endif
EXPIMP_TEMPLATE template class UTILITIES_API SObjectImpl<IObject>;
typedef SObjectImpl<IObject> SObject;
#pragma warning(pop)
}//namespace SOUI