summaryrefslogtreecommitdiff
path: root/src/Xml2XmlParser.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-07-11 23:20:48 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2012-07-11 23:20:48 +0900
commit70685bd233d5c32b9f762a5fc0e4d7fa42a013ee (patch)
treee7617d7a54b756f45c1e100998ec9a63cdd36281 /src/Xml2XmlParser.h
parentcd67e27ca4f610758835b951ac725fb188cb79b5 (diff)
Rewritten Xml2XmlParser
Now it is push parser + utility function for file parsing.
Diffstat (limited to 'src/Xml2XmlParser.h')
-rw-r--r--src/Xml2XmlParser.h41
1 files changed, 36 insertions, 5 deletions
diff --git a/src/Xml2XmlParser.h b/src/Xml2XmlParser.h
index 66cc1a8b..c608b6c7 100644
--- a/src/Xml2XmlParser.h
+++ b/src/Xml2XmlParser.h
@@ -2,7 +2,7 @@
/*
* aria2 - The high speed download utility
*
- * Copyright (C) 2011 Tatsuhiro Tsujikawa
+ * Copyright (C) 2012 Tatsuhiro Tsujikawa
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -37,25 +37,56 @@
#include "common.h"
+#include <sys/types.h>
+
#include <cstdlib>
+#include <string>
+#include <deque>
+
+#include <libxml/parser.h>
namespace aria2 {
-class BinaryStream;
class ParserStateMachine;
+namespace xml {
+
+enum XmlError {
+ ERR_XML_PARSE = -1,
+ ERR_RESET = -2
+};
+
+struct SessionData {
+ std::deque<std::string> charactersStack;
+ ParserStateMachine* psm;
+ SessionData(ParserStateMachine* psm)
+ : psm(psm)
+ {}
+ void reset()
+ {
+ charactersStack.clear();
+ }
+};
+
class XmlParser {
public:
// This object does not delete psm.
XmlParser(ParserStateMachine* psm);
~XmlParser();
- bool parseFile(const char* filename);
- bool parseBinaryStream(BinaryStream* binaryStream);
- bool parseMemory(const char* xml, size_t size);
+ ssize_t parseUpdate(const char* data, size_t size);
+ ssize_t parseFinal(const char* data, size_t size);
+ int reset();
private:
ParserStateMachine* psm_;
+ SessionData sessionData_;
+ xmlParserCtxtPtr ctx_;
+ int lastError_;
};
+bool parseFile(const std::string& filename, ParserStateMachine* psm);
+
+} // namespace xml
+
} // namespace aria2
#endif // D_XML2_XML_PARSER_H