Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members | File Members

Omniifr::StructDef_impl Class Reference

#include <StructDef.h>

Inheritance diagram for Omniifr::StructDef_impl:

Inheritance graph
[legend]
Collaboration diagram for Omniifr::StructDef_impl:

Collaboration graph
[legend]
List of all members.

Public Member Functions

StructMemberSeq * members ()
void members (const StructMemberSeq &v)
DefinitionKind def_kind ()
TypeCode_ptr type ()
 StructDef_impl ()
virtual ~StructDef_impl ()
void uncheckedDestroy ()
 Destroys this object, without first checking for dependencies.
bool canContain (DefinitionKind kind)
 Returns TRUE if this Container_impl can contain type 'kind'.
void reincarnate (const PersistNode &node)
 Re-create the repository from information saved in the log file.
void output (ostream &os)
 Save this object's state to a stream.

Private Attributes

Dependency3< StructMemberSeq > _members

Constructor & Destructor Documentation

Omniifr::StructDef_impl::StructDef_impl  )  [inline]
 

Definition at line 48 of file StructDef.h.

References _members.

00048 :_members(this){}

virtual Omniifr::StructDef_impl::~StructDef_impl  )  [inline, virtual]
 

Definition at line 49 of file StructDef.h.

00049 {}


Member Function Documentation

bool Omniifr::StructDef_impl::canContain DefinitionKind  kind  )  [virtual]
 

Returns TRUE if this Container_impl can contain type 'kind'.

Legal relationships are defined in CORBA spec. section 10.4.4 "Structure and Navigation of the Interface Repository".

Implements Omniifr::Container_impl.

Definition at line 77 of file StructDef.cc.

00078 {
00079   switch(kind)
00080   {
00081     case dk_Struct:
00082     case dk_Union:
00083     case dk_Enum:
00084       return true;
00085     default:
00086       return false;
00087   }
00088 }

DefinitionKind Omniifr::StructDef_impl::def_kind  )  [inline, virtual]
 

Implements Omniifr::IRObject_impl.

Definition at line 41 of file StructDef.h.

00041 {return dk_Struct;}

void Omniifr::StructDef_impl::members const StructMemberSeq &  v  ) 
 

Definition at line 35 of file StructDef.cc.

References _members, Omniifr::Dependency3< T_xxxDescriptionSeq >::assign(), Omniifr::IRObject_impl::checkReadonly(), DB, and IFELSE_OMNIORB4.

00036 {
00037   checkReadonly();
00038   // Spec: "When setting the members attribute, the type member of the
00039   // StructMember structure should be set to TC_void."
00040   // I interpret this as meaning that the type member is set by the setter
00041   // method (here). The word 'should' implies a recommendation rather than an 
00042   // imperative - I choose to not throw an exception if type is set, only to
00043   // ignore its value.
00044   StructMemberSeq temp(v); // take a copy (v is const).
00045   for(ULong i=0; i<temp.length(); i++)
00046   {
00047     if(CORBA::is_nil(temp[i].type_def))
00048         throw CORBA::BAD_PARAM(
00049           IFELSE_OMNIORB4(omni::BAD_PARAM_InvalidObjectRef,43),
00050           CORBA::COMPLETED_NO
00051         );
00052     try {
00053         temp[i].type=temp[i].type_def->type();
00054     }
00055     catch(...) {
00056       DB(15,"Caught exception at "<<__FILE__<<":"<<__LINE__)
00057       throw; // If an exception occurs, just propagate it as-is.
00058     }
00059   }
00060 
00061   _members.assign(temp);
00062 }

StructMemberSeq * Omniifr::StructDef_impl::members  ) 
 

Definition at line 30 of file StructDef.cc.

References _members, and Omniifr::Dependency3< T_xxxDescriptionSeq >::copy().

00031 {
00032   return _members.copy();
00033 }

void Omniifr::StructDef_impl::output ostream &  os  )  [virtual]
 

Save this object's state to a stream.

Implements Omniifr::IRObject_impl.

Definition at line 98 of file StructDef.cc.

References _members, Omniifr::Dependency3< T_xxxDescriptionSeq >::in(), Omniifr::Container_impl::outputContents(), and Omniifr::Contained_impl::outputSelf().

00099 {
00100   outputSelf(os,"StructDef");
00101   cdrMemoryStream memstr(CORBA::ULong(0),CORBA::Boolean(1)/*clearMemory*/);
00102   _members.in()>>=memstr;
00103   PersistNode::outputCdrMemoryStream(os,memstr,"\n state=");
00104   os<<" ;;\n";
00105   outputContents(os);
00106 }

void Omniifr::StructDef_impl::reincarnate const PersistNode node  )  [virtual]
 

Re-create the repository from information saved in the log file.

Reimplemented from Omniifr::IRObject_impl.

Definition at line 90 of file StructDef.cc.

References _members, and Omniifr::Dependency3< T_xxxDescriptionSeq >::uncheckedAssign().

00091 {
00092   cdrMemoryStream memstr =node.attrCdrStream("state");
00093   StructMemberSeq m;
00094   m<<=memstr;
00095   _members.uncheckedAssign(m); // Skip the checks performed by members(m)
00096 }

TypeCode_ptr Omniifr::StructDef_impl::type  )  [virtual]
 

Implements Omniifr::IDLType_impl.

Definition at line 64 of file StructDef.cc.

References _members, and Omniifr::Dependency3< T_xxxDescriptionSeq >::in().

00065 {
00066   return Repository_impl::inst()._orb
00067          ->create_struct_tc(_id.in(),_name.in(),_members.in());
00068 }

void Omniifr::StructDef_impl::uncheckedDestroy  )  [virtual]
 

Destroys this object, without first checking for dependencies.

Implements Omniifr::Container_impl.

Definition at line 70 of file StructDef.cc.

References _members, and Omniifr::Dependency3< T_xxxDescriptionSeq >::clear().

00071 {
00072   _members.clear();
00073   Contained_impl::uncheckedDestroy();
00074   Container_impl::uncheckedDestroy();
00075 }


Member Data Documentation

Dependency3<StructMemberSeq> Omniifr::StructDef_impl::_members [private]
 

Definition at line 46 of file StructDef.h.

Referenced by members(), output(), reincarnate(), StructDef_impl(), type(), and uncheckedDestroy().


The documentation for this class was generated from the following files:
Generated on Fri Mar 4 13:04:09 2005 for OmniIFR by  doxygen 1.4.1