]> matita.cs.unibo.it Git - helm.git/blob - helm/papers/use_case/stats/parse/parse_expat.c
ocaml 3.09 transition
[helm.git] / helm / papers / use_case / stats / parse / parse_expat.c
1 #include <stdio.h>
2 #include <sys/time.h>
3 #include <expat.h>
4
5 static void XMLCALL
6 startElement(void *userData, const char *name, const char **atts) { return; }
7
8 static void XMLCALL
9 endElement(void *userData, const char *name) { return; }
10
11 static void XMLCALL
12 characterData(void *userData, const char *s, int len) { return; }
13
14 static void XMLCALL
15 startCdata(void *userData) { return; }
16
17 static void XMLCALL
18 endCdata(void *userData) { return; }
19
20 int
21 main(int argc, char *argv[])
22 {
23         char buf[BUFSIZ];
24         int done;
25         FILE *xmlfile = stdin;
26         struct timeval timing1, timing2;
27         XML_Parser parser = XML_ParserCreateNS(NULL,' ');
28         XML_SetElementHandler(parser, startElement, endElement);
29         XML_SetCharacterDataHandler(parser, characterData);
30         XML_SetCdataSectionHandler(parser, startCdata, endCdata);
31         gettimeofday(&timing1, NULL);
32         do {
33                 size_t len = fread(buf, 1, sizeof(buf), xmlfile);
34                 done = len < sizeof(buf);
35                 if (XML_Parse(parser, buf, len, done) == XML_STATUS_ERROR) {
36                         fprintf(stderr,
37                                 "%s at line %d\n",
38                                 XML_ErrorString(XML_GetErrorCode(parser)),
39                                 XML_GetCurrentLineNumber(parser));
40                         return 1;
41                 }
42         } while (!done);
43         gettimeofday(&timing2, NULL) != 0;
44         XML_ParserFree(parser);
45         fprintf(stdout, "%d\n",
46                         ((timing2.tv_sec * 1000000 + timing2.tv_usec) -
47                          (timing1.tv_sec * 1000000 + timing1.tv_usec)) / 1000);
48         return 0;
49 }
50