Root/
Source at commit 1322 created 12 years 8 months ago. By meklort, Add doxygen to utils folder | |
---|---|
1 | /******************************************************************************␊ |
2 | *␊ |
3 | * $Id:$␊ |
4 | *␊ |
5 | *␊ |
6 | * Copyright (C) 1997-2006 by Dimitri van Heesch.␊ |
7 | *␊ |
8 | * Permission to use, copy, modify, and distribute this software and its␊ |
9 | * documentation under the terms of the GNU General Public License is hereby ␊ |
10 | * granted. No representations are made about the suitability of this software ␊ |
11 | * for any purpose. It is provided "as is" without express or implied warranty.␊ |
12 | * See the GNU General Public License for more details.␊ |
13 | *␊ |
14 | */␊ |
15 | ␊ |
16 | #ifndef _GRAPHHANDLER_H␊ |
17 | #define _GRAPHHANDLER_H␊ |
18 | ␊ |
19 | #include "stringimpl.h"␊ |
20 | #include "doxmlintf.h"␊ |
21 | #include "basehandler.h"␊ |
22 | #include "baseiterator.h"␊ |
23 | ␊ |
24 | class NodeHandler;␊ |
25 | class ChildNodeHandler;␊ |
26 | class EdgeLabelHandler;␊ |
27 | ␊ |
28 | class GraphHandler : public IGraph, public BaseHandler<GraphHandler>␊ |
29 | {␊ |
30 | friend class NodeIterator;␊ |
31 | public:␊ |
32 | GraphHandler(IBaseHandler *parent,const char *endTag);␊ |
33 | virtual ~GraphHandler();␊ |
34 | ␊ |
35 | void startGraph(const QXmlAttributes &attrib);␊ |
36 | void endGraph();␊ |
37 | void startNode(const QXmlAttributes &attrib);␊ |
38 | NodeHandler *getNodeById(const QString &id) const;␊ |
39 | ␊ |
40 | // IGraph␊ |
41 | virtual INodeIterator *nodes() const;␊ |
42 | ␊ |
43 | private:␊ |
44 | IBaseHandler *m_parent;␊ |
45 | QList<NodeHandler> m_nodes;␊ |
46 | QDict<NodeHandler> *m_nodeDict;␊ |
47 | };␊ |
48 | ␊ |
49 | //----------------------------------------------------------------------␊ |
50 | ␊ |
51 | class NodeHandler : public INode, public BaseHandler<NodeHandler>␊ |
52 | {␊ |
53 | friend class ChildNodeIterator;␊ |
54 | public:␊ |
55 | NodeHandler(GraphHandler *gh);␊ |
56 | virtual ~NodeHandler();␊ |
57 | ␊ |
58 | void startNode(const QXmlAttributes &attrib);␊ |
59 | void endNode();␊ |
60 | void startLabel(const QXmlAttributes &attrib);␊ |
61 | void endLabel();␊ |
62 | void startLink(const QXmlAttributes &attrib);␊ |
63 | void endLink();␊ |
64 | void startChildNode(const QXmlAttributes &attrib);␊ |
65 | ␊ |
66 | // INode␊ |
67 | virtual const IString *id() const { return &m_id; }␊ |
68 | virtual const IString *label() const { return &m_label; }␊ |
69 | virtual const IString *linkId() const { return &m_link; }␊ |
70 | virtual IChildNodeIterator *children() const;␊ |
71 | ␊ |
72 | private:␊ |
73 | IBaseHandler *m_parent;␊ |
74 | StringImpl m_id;␊ |
75 | StringImpl m_label;␊ |
76 | StringImpl m_link;␊ |
77 | QList<ChildNodeHandler> m_children;␊ |
78 | GraphHandler *m_graph;␊ |
79 | };␊ |
80 | ␊ |
81 | class NodeIterator : public BaseIterator<INodeIterator,INode,NodeHandler>␊ |
82 | {␊ |
83 | public:␊ |
84 | NodeIterator(const GraphHandler &handler) :␊ |
85 | BaseIterator<INodeIterator,INode,NodeHandler>(handler.m_nodes) {}␊ |
86 | };␊ |
87 | ␊ |
88 | //----------------------------------------------------------------------␊ |
89 | ␊ |
90 | class ChildNodeHandler : public IChildNode, public BaseHandler<ChildNodeHandler>␊ |
91 | {␊ |
92 | friend class EdgeLabelIterator;␊ |
93 | public:␊ |
94 | ChildNodeHandler(IBaseHandler *parent,GraphHandler *gh);␊ |
95 | virtual ~ChildNodeHandler();␊ |
96 | ␊ |
97 | void startChildNode(const QXmlAttributes &attrib);␊ |
98 | void endChildNode();␊ |
99 | void startEdgeLabel(const QXmlAttributes &attrib);␊ |
100 | ␊ |
101 | // IChildNode␊ |
102 | virtual INode *node() const;␊ |
103 | virtual NodeRelation relation() const { return m_relation; }␊ |
104 | virtual const IString * relationString() const { return &m_relationString; }␊ |
105 | virtual IEdgeLabelIterator *edgeLabels() const;␊ |
106 | ␊ |
107 | private:␊ |
108 | IBaseHandler *m_parent;␊ |
109 | QString m_id;␊ |
110 | NodeRelation m_relation;␊ |
111 | StringImpl m_relationString;␊ |
112 | QList<EdgeLabelHandler> m_edgeLabels;␊ |
113 | GraphHandler *m_graph;␊ |
114 | };␊ |
115 | ␊ |
116 | class ChildNodeIterator : public BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>␊ |
117 | {␊ |
118 | public:␊ |
119 | ChildNodeIterator(const NodeHandler &handler) :␊ |
120 | BaseIterator<IChildNodeIterator,IChildNode,ChildNodeHandler>(handler.m_children) {}␊ |
121 | };␊ |
122 | ␊ |
123 | //----------------------------------------------------------------------␊ |
124 | ␊ |
125 | class EdgeLabelHandler : public IEdgeLabel, public BaseHandler<EdgeLabelHandler>␊ |
126 | {␊ |
127 | friend class EdgeLabelIterator;␊ |
128 | public:␊ |
129 | EdgeLabelHandler(IBaseHandler *parent);␊ |
130 | virtual ~EdgeLabelHandler();␊ |
131 | ␊ |
132 | void startEdgeLabel(const QXmlAttributes &attrib);␊ |
133 | void endEdgeLabel();␊ |
134 | ␊ |
135 | // IEdgeLabel␊ |
136 | virtual const IString *label() const { return &m_label; }␊ |
137 | ␊ |
138 | private:␊ |
139 | IBaseHandler *m_parent;␊ |
140 | StringImpl m_label;␊ |
141 | };␊ |
142 | ␊ |
143 | class EdgeLabelIterator : public BaseIterator<IEdgeLabelIterator,IEdgeLabel,EdgeLabelHandler>␊ |
144 | {␊ |
145 | public:␊ |
146 | EdgeLabelIterator(const ChildNodeHandler &handler) :␊ |
147 | BaseIterator<IEdgeLabelIterator,IEdgeLabel,EdgeLabelHandler>(handler.m_edgeLabels) {}␊ |
148 | };␊ |
149 | ␊ |
150 | void graphhandler_init();␊ |
151 | void graphhandler_exit();␊ |
152 | ␊ |
153 | #endif␊ |
154 | ␊ |
155 |