diff options
author | Abdullah Sowayan <sowayan@users.noreply.github.com> | 2007-03-18 22:23:37 +0000 |
---|---|---|
committer | Abdullah Sowayan <sowayan@users.noreply.github.com> | 2007-03-18 22:23:37 +0000 |
commit | 06a34455bd98b1379cc69bbc5b2cf085e0fc0d9b (patch) | |
tree | 8815ce3b3a85c3c4285429295f338e00ea4497f4 /CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp | |
parent | d66fcc9b4aaec8e88eeb83fc578fdf8a3cc963de (diff) | |
download | ATCD-06a34455bd98b1379cc69bbc5b2cf085e0fc0d9b.tar.gz |
Diffstat (limited to 'CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp')
-rw-r--r-- | CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp | 177 |
1 files changed, 177 insertions, 0 deletions
diff --git a/CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp b/CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp new file mode 100644 index 00000000000..4fccb9a0ebc --- /dev/null +++ b/CIAO/CCF/CCF/IDL2/SemanticGraph/Union.cpp @@ -0,0 +1,177 @@ +// file : CCF/IDL2/SemanticGraph/Union.cpp +// author : Boris Kolpackov <boris@dre.vanderbilt.edu> +// cvs-id : $Id$ + +#include "CCF/IDL2/SemanticGraph/Union.hpp" + +namespace CCF +{ + namespace IDL2 + { + namespace SemanticGraph + { + using Introspection::TypeInfo; + using Introspection::Access; + + + // Selects + // + // + namespace + { + TypeInfo + selects_init_ () + { + TypeInfo ti (typeid (Selects)); + ti.add_base (Access::PUBLIC, true, Edge::static_type_info ()); + return ti; + } + + TypeInfo selects_ (selects_init_ ()); + } + + TypeInfo const& Selects:: + static_type_info () { return selects_; } + + + // UnionMember + // + // + namespace + { + TypeInfo + union_member_init_ () + { + TypeInfo ti (typeid (UnionMember)); + ti.add_base (Access::PUBLIC, true, Member::static_type_info ()); + return ti; + } + + TypeInfo union_member_ (union_member_init_ ()); + } + + TypeInfo const& UnionMember:: + static_type_info () { return union_member_; } + + + // Selector + // + // + namespace + { + TypeInfo + selector_init_ () + { + TypeInfo ti (typeid (Selector)); + ti.add_base (Access::PUBLIC, true, Node::static_type_info ()); + return ti; + } + + TypeInfo selector_ (selector_init_ ()); + } + + TypeInfo const& Selector:: + static_type_info () { return selector_; } + + Selector:: + ~Selector () + { + } + + // DefaultSelector + // + // + namespace + { + TypeInfo + default_selector_init_ () + { + TypeInfo ti (typeid (DefaultSelector)); + ti.add_base (Access::PUBLIC, true, Selector::static_type_info ()); + return ti; + } + + TypeInfo default_selector_ (default_selector_init_ ()); + } + + TypeInfo const& DefaultSelector:: + static_type_info () { return default_selector_; } + + + // ValueSelector + // + // + namespace + { + TypeInfo + value_selector_init_ () + { + TypeInfo ti (typeid (ValueSelector)); + ti.add_base (Access::PUBLIC, true, Selector::static_type_info ()); + ti.add_base (Access::PUBLIC, true, Instance::static_type_info ()); + return ti; + } + + TypeInfo value_selector_ (value_selector_init_ ()); + } + + TypeInfo const& ValueSelector:: + static_type_info () { return value_selector_; } + + // Union + // + // + namespace + { + TypeInfo + union_init_ () + { + TypeInfo ti (typeid (Union)); + + ti.add_base ( + Access::PUBLIC, true, Specialization::static_type_info ()); + + ti.add_base (Access::PUBLIC, true, Scope::static_type_info ()); + return ti; + } + + TypeInfo union_ (union_init_ ()); + } + + TypeInfo const& Union:: + static_type_info () { return union_; } + + bool Union:: + complete () const + { + if (defined ()) + { + CompilerElements::Context& ctx ( + const_cast<CompilerElements::Context&> (context ())); + + if (ctx.count ("union-complete-test")) + return true; + + ctx.set ("union-complete-test", true); + bool c (true); + + for (Scope::NamesIterator i (names_begin ()); + c && i != names_end (); + ++i) + { + Member const& m (dynamic_cast<Member&> ((*i)->named ())); + Type const& t (m.belongs ().type ()); + + if (!t.complete ()) + c = false; + } + + ctx.remove ("union-complete-test"); + return c; + } + + return false; + } + } + } +} |