01: /*
02: * The Apache Software License, Version 1.1
03: *
04: *
05: * Copyright (c) 1999 The Apache Software Foundation. All rights
06: * reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * modification, are permitted provided that the following conditions
10: * are met:
11: *
12: * 1. Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * 2. Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in
17: * the documentation and/or other materials provided with the
18: * distribution.
19: *
20: * 3. The end-user documentation included with the redistribution,
21: * if any, must include the following acknowledgment:
22: * "This product includes software developed by the
23: * Apache Software Foundation (http://www.apache.org/)."
24: * Alternately, this acknowledgment may appear in the software itself,
25: * if and wherever such third-party acknowledgments normally appear.
26: *
27: * 4. The names "Xerces" and "Apache Software Foundation" must
28: * not be used to endorse or promote products derived from this
29: * software without prior written permission. For written
30: * permission, please contact apache@apache.org.
31: *
32: * 5. Products derived from this software may not be called "Apache",
33: * nor may "Apache" appear in their name, without prior written
34: * permission of the Apache Software Foundation.
35: *
36: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39: * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
40: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47: * SUCH DAMAGE.
48: * ====================================================================
49: *
50: * This software consists of voluntary contributions made by many
51: * individuals on behalf of the Apache Software Foundation and was
52: * originally based on software copyright (c) 1999, International
53: * Business Machines, Inc., http://www.apache.org. For more
54: * information on the Apache Software Foundation, please see
55: * <http://www.apache.org/>.
56: */
57: package org.apache.xerces.dom;
58:
59: import java.util.Vector;
60:
61: /** Internal class LCount is used to track the number of
62: listeners registered for a given event name, as an entry
63: in a global hashtable. This should allow us to avoid generating,
64: or discard, events for which no listeners are registered.
65:
66: ***** There should undoubtedly be methods here to manipulate
67: this table. At the moment that code's residing in NodeImpl.
68: Move it when we have a chance to do so. Sorry; we were
69: rushed.
70:
71: ***** Also, I'm currently asking "are there any listeners"
72: by testing captures+bubbles+defaults =? 0. It would probably
73: make sense to have a separate "total" field, calculated at
74: add/remove, to save a few cycles during dispatch. Fix.
75:
76: ???? CONCERN: Hashtables are known to be "overserialized" in
77: current versions of Java. That may impact performance.
78:
79: ???? CONCERN: The hashtable should probably be a per-document object.
80: Finer granularity would be even better, but would cost more cycles to
81: resolve and might not save enough event traffic to be worth the investment.
82: */
83: class LCount {
84: static java.util.Hashtable lCounts = new java.util.Hashtable();
85: public int captures = 0, bubbles = 0, defaults = 0;
86:
87: static LCount lookup(String evtName) {
88: LCount lc = (LCount) lCounts.get(evtName);
89: if (lc == null)
90: lCounts.put(evtName, (lc = new LCount()));
91: return lc;
92: }
93: } // class LCount
|