winamp/Src/Plugins/Library/ml_devices/gen_deviceprovider/deviceCommandNodeParser.cpp

75 lines
1.5 KiB
C++
Raw Normal View History

2024-09-24 12:54:57 +00:00
#include "main.h"
#include "./DeviceCommandNodeParser.h"
#include "../../xml/obj_xml.h"
DeviceCommandNodeParser::DeviceCommandNodeParser()
: reader(NULL), test(NULL)
{
}
DeviceCommandNodeParser::~DeviceCommandNodeParser()
{
End();
}
BOOL DeviceCommandNodeParser::Begin(obj_xml *xmlReader, TestSuite *testSuite)
{
if (NULL != reader || NULL != test)
return FALSE;
if (NULL == xmlReader || NULL == testSuite)
return FALSE;
reader = xmlReader;
reader->AddRef();
test = testSuite;
reader->xmlreader_registerCallback(L"testprovider\fcommands\fcommand", this);
return TRUE;
}
void DeviceCommandNodeParser::End()
{
if (NULL != reader)
{
reader->xmlreader_unregisterCallback(this);
reader->Release();
reader = NULL;
}
if (NULL != test)
test = NULL;
}
void DeviceCommandNodeParser::Event_XmlStartElement(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
{
elementParser.Begin(reader, params);
}
void DeviceCommandNodeParser::Event_XmlEndElement(const wchar_t *xmlpath, const wchar_t *xmltag)
{
ifc_devicecommand *result;
if (FALSE != elementParser.End(reader, &result))
{
if (NULL != test)
test->AddCommand(result);
result->Release();
}
}
void DeviceCommandNodeParser::Event_XmlError(int linenum, int errcode, const wchar_t *errstr)
{
}
#define CBCLASS DeviceCommandNodeParser
START_DISPATCH;
VCB(ONSTARTELEMENT, Event_XmlStartElement)
VCB(ONENDELEMENT, Event_XmlEndElement)
VCB(ONERROR, Event_XmlError)
END_DISPATCH;
#undef CBCLASS