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/Struct.cpp | |
parent | d66fcc9b4aaec8e88eeb83fc578fdf8a3cc963de (diff) | |
download | ATCD-Static_RT_DAnCE.tar.gz |
Diffstat (limited to 'CIAO/CCF/CCF/IDL2/SemanticGraph/Struct.cpp')
-rw-r--r-- | CIAO/CCF/CCF/IDL2/SemanticGraph/Struct.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/CIAO/CCF/CCF/IDL2/SemanticGraph/Struct.cpp b/CIAO/CCF/CCF/IDL2/SemanticGraph/Struct.cpp new file mode 100644 index 00000000000..46fd9b9ef3a --- /dev/null +++ b/CIAO/CCF/CCF/IDL2/SemanticGraph/Struct.cpp @@ -0,0 +1,67 @@ +// file : CCF/IDL2/SemanticGraph/Struct.cpp +// author : Boris Kolpackov <boris@dre.vanderbilt.edu> +// cvs-id : $Id$ + +#include "CCF/IDL2/SemanticGraph/Struct.hpp" +#include "CCF/IDL2/SemanticGraph/Member.hpp" + +namespace CCF +{ + namespace IDL2 + { + namespace SemanticGraph + { + using Introspection::TypeInfo; + using Introspection::Access; + + namespace + { + TypeInfo + struct_init_ () + { + TypeInfo ti (typeid (Struct)); + ti.add_base (Access::PUBLIC, true, Type::static_type_info ()); + ti.add_base (Access::PUBLIC, true, Scope::static_type_info ()); + return ti; + } + + TypeInfo struct_ (struct_init_ ()); + } + + TypeInfo const& Struct:: + static_type_info () { return struct_; } + + bool Struct:: + complete () const + { + if (defined ()) + { + CompilerElements::Context& ctx ( + const_cast<CompilerElements::Context&> (context ())); + + if (ctx.count ("struct-complete-test")) + return true; + + ctx.set ("struct-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 ("struct-complete-test"); + return c; + } + + return false; + } + } + } +} |