KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > xerces > internal > impl > dtd > models > CMNode


1 /*
2  * The Apache Software License, Version 1.1
3  *
4  *
5  * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
6  * reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * 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
58 package com.sun.org.apache.xerces.internal.impl.dtd.models;
59
60 /**
61  * A content model node.
62  *
63  * @version $Id: CMNode.java,v 1.2 2002/01/29 01:15:10 lehors Exp $
64  */

65 public abstract class CMNode
66 {
67     // -------------------------------------------------------------------
68
// Constructors
69
// -------------------------------------------------------------------
70
public CMNode(int type)
71     {
72         fType = type;
73     }
74
75
76     // -------------------------------------------------------------------
77
// Package, abstract methods
78
// -------------------------------------------------------------------
79
// made this public so it could be implemented and used outside this package -neilg.
80
public abstract boolean isNullable() ;
81
82
83     // -------------------------------------------------------------------
84
// Package final methods
85
// -------------------------------------------------------------------
86
public final int type()
87     {
88         return fType;
89     }
90
91     // made this public so it could be implemented and used outside this package -neilg.
92
public final CMStateSet firstPos()
93     {
94         if (fFirstPos == null)
95         {
96             fFirstPos = new CMStateSet(fMaxStates);
97             calcFirstPos(fFirstPos);
98         }
99         return fFirstPos;
100     }
101
102     // made this public so it could be implemented and used outside this package -neilg.
103
public final CMStateSet lastPos()
104     {
105         if (fLastPos == null)
106         {
107             fLastPos = new CMStateSet(fMaxStates);
108             calcLastPos(fLastPos);
109         }
110         return fLastPos;
111     }
112
113     final void setFollowPos(CMStateSet setToAdopt)
114     {
115         fFollowPos = setToAdopt;
116     }
117
118     public final void setMaxStates(int maxStates)
119     {
120         fMaxStates = maxStates;
121     }
122
123
124     // -------------------------------------------------------------------
125
// Protected, abstract methods
126
// -------------------------------------------------------------------
127
protected abstract void calcFirstPos(CMStateSet toSet) ;
128
129     protected abstract void calcLastPos(CMStateSet toSet) ;
130
131
132     // -------------------------------------------------------------------
133
// Private data members
134
//
135
// fType
136
// The type of node. This indicates whether its a leaf or an
137
// operation. Though we also do derived classes for these types,
138
// it is too expensive to use runtime typing to find this out.
139
// This is one of the ContentSpecNode.NODE_XXX types.
140
//
141
// fFirstPos
142
// The set of NFA states that represent the entry states of this
143
// node in the DFA.
144
//
145
// fFollowPos
146
// The set of NFA states that can be gotten to from from this
147
// node in the DFA.
148
//
149
// fLastPos
150
// The set of NFA states that represent the final states of this
151
// node in the DFA.
152
//
153
// fMaxStates
154
// The maximum number of states that the NFA has, which means the
155
// max number of NFA states that have to be traced in the state
156
// sets during the building of the DFA. Its unfortunate that it
157
// has to be stored redundantly, but we need to fault in the
158
// state set members and they have to be sized to this size. We
159
// init to to -1 so it will cause an error if its used without
160
// being initialized.
161
// -------------------------------------------------------------------
162
private int fType;
163     private CMStateSet fFirstPos = null;
164     private CMStateSet fFollowPos = null;
165     private CMStateSet fLastPos = null;
166     private int fMaxStates = -1;
167 };
168
169
170
Popular Tags