source: trunk/PerfTest/xerces_markup_stats/markup_stats_handlers.cpp @ 144

Last change on this file since 144 was 144, checked in by ksherdy, 11 years ago

Create PerfTest? directory. Add Expat and Xerces-C based markup_stats applications.

File size: 4.5 KB
Line 
1#include "markup_stats_handlers.hpp"
2#include <xercesc/sax/SAXParseException.hpp>
3#include <xercesc/sax/SAXException.hpp>
4#include <xercesc/sax2/Attributes.hpp>
5#include <iostream>
6
7int comment_count = 0;
8int comment_length = 0;
9int CDATA_start_count = 0;
10int CDATA_start_pos = 0;
11int CDATA_length = 0;
12int CDATA_end_count = 0;
13int PI_count = 0;
14int PI_length = 0;
15//int empty_elem_count = 0;
16//int empty_elem_length = 0;
17int start_tag_count = 0;
18int start_tag_length = 0;
19int attribute_count = 0;
20int end_tag_count = 0;
21int end_tag_length = 0;
22int reference_count = 0;
23int reference_length = 0;
24int text_item_count = 0;
25int text_item_length = 0;
26int error_item_count = 0;
27int error_item_length = 0;
28int nesting_depth = 0;
29int max_nesting_depth = 0;
30int total_attribute_count = 0;
31int total_att_name_length = 0;
32int total_att_value_length = 0;
33//int namespace_count = 0;
34//int total_namespace_name_length = 0;
35//int total_namespace_URI_length = 0;
36int     ignorable_ws_item_count = 0;
37int     ignorable_ws_item_length = 0;
38
39
40MarkupStats::MarkupStats() 
41{       
42
43}
44
45MarkupStats::~MarkupStats() 
46{
47
48}       
49
50// -----------------------------------------------------------------------
51//  Handlers for the SAX2 ContentHandler interface
52// -----------------------------------------------------------------------
53void MarkupStats::startElement(const XMLCh* const uri
54                                   , const XMLCh* const localname
55                                   , const XMLCh* const qname
56                                   , const Attributes& attrs)
57{
58        start_tag_count +=1;
59       
60        #if defined(CALC_AVG)
61       
62                start_tag_length += XMLString::stringLen(localname);
63       
64        #endif
65       
66        nesting_depth += 1;
67        if (nesting_depth > max_nesting_depth) max_nesting_depth = nesting_depth;
68       
69        int len = attrs.getLength();
70        total_attribute_count += len;
71       
72        #if defined(CALC_AVG)
73               
74                for (int i = 0; i < len; i++) 
75                {
76                        total_att_name_length += XMLString::stringLen(attrs.getQName(i));
77                        total_att_value_length += XMLString::stringLen(attrs.getValue(i));
78                }
79               
80        #endif
81}
82
83void MarkupStats::endElement(const XMLCh *const uri, const XMLCh *const localname, const XMLCh *const qname)
84{
85        end_tag_count +=1;
86        #if defined(CALC_AVG)
87                end_tag_length += XMLString::stringLen(qname);
88        #endif
89        nesting_depth -= 1;     
90}
91
92void MarkupStats::characters (const XMLCh *const chars, const unsigned int length)
93{
94        text_item_count +=1;
95        text_item_length += length;     
96}
97
98void MarkupStats::processingInstruction (const XMLCh *const target, const XMLCh *const data)
99{
100        PI_count +=1;
101        #if defined(CALC_AVG)   
102       
103                PI_length += XMLString::stringLen(data);
104       
105        #endif
106}
107
108// -----------------------------------------------------------------------
109//  Handlers for the SAXs2 LexicalHandler interface
110// -----------------------------------------------------------------------
111void MarkupStats::comment(const XMLCh *const chars, const unsigned int length) 
112{
113        comment_count +=1;
114        comment_length += length;
115}
116
117void MarkupStats::startCDATA()
118{
119        CDATA_start_count +=1;
120        //CDATA_length;
121}
122
123void MarkupStats::endCDATA()
124{
125        CDATA_end_count +=1;
126        //CDATA_length;
127}
128
129void MarkupStats::startEntity(const XMLCh *const name)
130{
131        reference_count += 1;
132       
133        #if defined(CALC_AVG)
134       
135                reference_length += XMLString::stringLen(name);
136       
137        #endif
138}
139
140void MarkupStats::endEntity(const XMLCh *const name)
141{
142       
143}
144
145// ---------------------------------------------------------------------------
146//  SAX2CountHandlers: Overrides of the SAX ErrorHandler interface
147// ---------------------------------------------------------------------------
148
149void MarkupStats::error(const SAXParseException& e)
150{
151        ::error_item_count++;
152       
153        #if defined (DEBUG)
154   
155    std::cout << "\nError at file " <<  XMLString::transcode(e.getSystemId())
156                 << ", line " << e.getLineNumber()
157                 << ", char " << e.getColumnNumber()
158         << "\n  Message: " <<  XMLString::transcode(e.getMessage()) << std::endl;
159         
160    #endif
161}
162
163void MarkupStats::fatalError(const SAXParseException& e)
164{
165        ::error_item_count++;
166       
167        #if defined (DEBUG)
168       
169        std::cout << "\nFatal Error at file " <<  XMLString::transcode(e.getSystemId())
170                 << ", line " << e.getLineNumber()
171                 << ", char " << e.getColumnNumber()
172             << "\n  Message: " <<  XMLString::transcode(e.getMessage()) << std::endl;
173       
174    #endif   
175}
176
177void MarkupStats::warning(const SAXParseException& e)
178{
179        #if defined (DEBUG)
180       
181    std::cout << "\nWarning at file " <<  XMLString::transcode(e.getSystemId())
182                 << ", line " << e.getLineNumber()
183                 << ", char " << e.getColumnNumber()
184         << "\n  Message: " <<  XMLString::transcode(e.getMessage()) << std::endl;
185         
186        #endif         
187}
188
Note: See TracBrowser for help on using the repository browser.