aboutsummaryrefslogtreecommitdiff
path: root/xsd-frontend/semantic-graph/elements.hxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-03-03 19:21:50 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-03-03 19:21:50 +0200
commite4f4f0bed9befbde2117af6f128d9323be3f1638 (patch)
tree6c41709cdc5fa51b0354b68897a8cc1651b8eb9c /xsd-frontend/semantic-graph/elements.hxx
parentca2bc859cf0001848224ff00a92fcc5d60a16e7f (diff)
Add union information to the semantics graph
New test: union.
Diffstat (limited to 'xsd-frontend/semantic-graph/elements.hxx')
-rw-r--r--xsd-frontend/semantic-graph/elements.hxx55
1 files changed, 50 insertions, 5 deletions
diff --git a/xsd-frontend/semantic-graph/elements.hxx b/xsd-frontend/semantic-graph/elements.hxx
index 58779fa..3d8991e 100644
--- a/xsd-frontend/semantic-graph/elements.hxx
+++ b/xsd-frontend/semantic-graph/elements.hxx
@@ -1081,26 +1081,71 @@ namespace XSDFrontend
class Specialization: public virtual Type
{
+ typedef
+ Cult::Containers::Vector<Arguments*>
+ Argumented;
+
public:
+ typedef
+ Bits::PointerIterator<Argumented::Iterator>
+ ArgumentedIterator;
+
+ typedef
+ Bits::PointerIterator<Argumented::ConstIterator>
+ ArgumentedConstIterator;
+
+ ArgumentedIterator
+ argumented_begin ()
+ {
+ return argumented_.begin ();
+ }
+
+ ArgumentedConstIterator
+ argumented_begin () const
+ {
+ return argumented_.begin ();
+ }
+
+ ArgumentedIterator
+ argumented_end ()
+ {
+ return argumented_.end ();
+ }
+
+ ArgumentedConstIterator
+ argumented_end () const
+ {
+ return argumented_.end ();
+ }
+
+ // Shortcut for one-argument specializations.
+ //
Arguments&
argumented () const
{
- return *argumented_;
+ return *argumented_[0];
}
protected:
friend class Bits::Graph<Node, Edge>;
- void
+ using Type::add_edge_right;
+
+ Void
add_edge_right (Arguments& a)
{
- argumented_ = &a;
+ argumented_.push_back (&a);
}
- using Type::add_edge_right;
+ public:
+ Void
+ add_edge_right (Arguments& a, ArgumentedIterator const& pos)
+ {
+ argumented_.insert (pos.base (), &a);
+ }
private:
- Arguments* argumented_;
+ Argumented argumented_;
};