]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/papers/use_case/stats/parse/parse_expat.c
added parse test for
[helm.git] / helm / papers / use_case / stats / parse / parse_expat.c
diff --git a/helm/papers/use_case/stats/parse/parse_expat.c b/helm/papers/use_case/stats/parse/parse_expat.c
new file mode 100644 (file)
index 0000000..9008887
--- /dev/null
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <sys/time.h>
+#include <expat.h>
+
+static void XMLCALL
+startElement(void *userData, const char *name, const char **atts) { return; }
+
+static void XMLCALL
+endElement(void *userData, const char *name) { return; }
+
+static void XMLCALL
+characterData(void *userData, const char *s, int len) { return; }
+
+static void XMLCALL
+startCdata(void *userData) { return; }
+
+static void XMLCALL
+endCdata(void *userData) { return; }
+
+int
+main(int argc, char *argv[])
+{
+       char buf[BUFSIZ];
+       int done;
+       FILE *xmlfile = stdin;
+       struct timeval timing1, timing2;
+       XML_Parser parser = XML_ParserCreateNS(NULL,' ');
+       XML_SetElementHandler(parser, startElement, endElement);
+       XML_SetCharacterDataHandler(parser, characterData);
+       XML_SetCdataSectionHandler(parser, startCdata, endCdata);
+       gettimeofday(&timing1, NULL);
+       do {
+               size_t len = fread(buf, 1, sizeof(buf), xmlfile);
+               done = len < sizeof(buf);
+               if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
+                       fprintf(stderr,
+                               "%s at line %d\n",
+                               XML_ErrorString(XML_GetErrorCode(parser)),
+                               XML_GetCurrentLineNumber(parser));
+                       return 1;
+               }
+       } while (!done);
+       gettimeofday(&timing2, NULL) != 0;
+       XML_ParserFree(parser);
+       fprintf(stdout, "%d\n",
+                       ((timing2.tv_sec * 1000000 + timing2.tv_usec) -
+                        (timing1.tv_sec * 1000000 + timing1.tv_usec)) / 1000);
+       return 0;
+}
+