#include <Repository.h>
Inheritance diagram for Omniifr::Repository_impl:


Public Member Functions | |
| void | init (ORB_ptr orb, bool readonly=false, Persist *persist=NULL) |
| Contained_ptr | lookup_id (const char *search_id) |
| typedef: RepositoryId | |
| TypeCode_ptr | get_canonical_typecode (TypeCode_ptr tc) |
| PrimitiveDef_ptr | get_primitive (PrimitiveKind kind) |
| StringDef_ptr | create_string (ULong bound) |
| WstringDef_ptr | create_wstring (ULong bound) |
| SequenceDef_ptr | create_sequence (ULong bound, IDLType_ptr element_type) |
| ArrayDef_ptr | create_array (ULong length, IDLType_ptr element_type) |
| FixedDef_ptr | create_fixed (UShort digits, Short scale) |
| DefinitionKind | def_kind () |
| Repository_impl () | |
| virtual | ~Repository_impl () |
| void | uncheckedDestroy () |
| Destroys this object, without first checking for dependencies. | |
| void | createPoa (PortableServer::POA_ptr rootPoa) |
| bool | canContain (DefinitionKind kind) |
| Returns TRUE if this Container_impl can contain type 'kind'. | |
| void | addId (string id, Contained_impl *container) |
| void | removeId (string id) |
| Contained_impl * | findId (string id) |
| void | addAnonymous (IDLType_impl *anon) |
| void | removeAnonymous (IDLType_impl *anon) |
| bool | readonly () const |
| void | reincarnate (const PersistNode &node) |
| This is the top-level reincarnate() method, it calls all of the other ones. | |
| void | output (ostream &os) |
| Save this object's state to a stream. | |
Static Public Member Functions | |
| static Repository_impl & | inst () |
Public Attributes | |
| ORB_ptr | _orb |
| PortableServer::POA_var | _poa |
| PortableServer::POA_var | _omniINSPOA |
| DynamicAny::DynAnyFactory_var | _DynAnyFactory |
Protected Member Functions | |
| PortableServer::POA_ptr | _default_POA () |
| Returns a reference to this servant's default POA. | |
Private Attributes | |
| map< PrimitiveKind, PrimitiveDef_impl * > | _primitives |
| set< IDLType_impl * > | _anonymous |
| map< string, Contained_impl * > | _idmap |
| bool | _readonly |
Static Private Attributes | |
| static Repository_impl | _inst |
|
|
Definition at line 455 of file Repository.cc. 00455 : 00456 _primitives(), 00457 _anonymous(), 00458 _idmap(), 00459 _readonly(false) 00460 {}
|
|
|
Definition at line 463 of file Repository.cc. 00464 {}
|
|
|
Returns a reference to this servant's default POA. The default implementation returns a reference to the Repository's _poa. Reimplemented from Omniifr::IRObject_impl. Definition at line 696 of file Repository.cc. References _omniINSPOA. 00697 {
00698 return PortableServer::POA::_duplicate(_omniINSPOA.in());
00699 }
|
|
|
Definition at line 523 of file Repository.cc. References _anonymous, and IFELSE_OMNIORB4. 00524 {
00525 // Compare the implementation of this method to that of
00526 // Container::addContained().
00527 assert(anon);
00528 this->_add_ref(); // Do this now to ensure we aren't destroyed during the call
00529 try
00530 {
00531 // Verify that we don't already contain it.
00532 assert(_anonymous.find(anon)==_anonymous.end());
00533 // Check that we are able to contain the specified type.
00534 CORBA::DefinitionKind anonKind =anon->def_kind();
00535 switch(anonKind)
00536 {
00537 case dk_String:
00538 case dk_Wstring:
00539 case dk_Sequence:
00540 case dk_Array:
00541 case dk_Fixed:
00542 break;
00543
00544 default:
00545 throw CORBA::BAD_PARAM(
00546 IFELSE_OMNIORB4(omni::BAD_PARAM_TargetIsInvalidContainer,4),
00547 CORBA::COMPLETED_NO
00548 );
00549 }
00550 // proceed...
00551 _anonymous.insert(anon);
00552 }
00553 catch(...)
00554 {
00555 this->_remove_ref();
00556 throw;
00557 }
00558 }
|
|
||||||||||||
|
Definition at line 498 of file Repository.cc. References _idmap, and findId().
|
|
|
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 480 of file Repository.cc. References CASE_TYPEDEF. 00481 {
00482 switch(kind)
00483 {
00484 CASE_TYPEDEF
00485 case dk_Constant:
00486 case dk_Exception:
00487 case dk_Interface:
00488 case dk_Value:
00489 case dk_ValueBox:
00490 case dk_Module:
00491 return true;
00492 default:
00493 return false;
00494 }
00495 }
|
|
||||||||||||
|
Definition at line 330 of file Repository.cc. References Omniifr::IRObject_impl::checkReadonly(), DB, and Omniifr::Creche< T >::release(). 00334 {
00335 DB(5,"Repository::create_array("<<length<<",...)")
00336 checkReadonly();
00337 Creche<ArrayDef_impl> result(new ArrayDef_impl(length));
00338 result->element_type_def(element_type);
00339 return result.release()->_this();
00340 }
|
|
||||||||||||
|
Definition at line 343 of file Repository.cc. References Omniifr::IRObject_impl::checkReadonly(), DB, and Omniifr::Creche< T >::release(). 00344 {
00345 DB(5,"Repository::create_fixed("<<digits<<","<<scale<<")")
00346 checkReadonly();
00347 Creche<FixedDef_impl> result(new FixedDef_impl(digits,scale));
00348 return result.release()->_this();
00349 }
|
|
||||||||||||
|
Definition at line 317 of file Repository.cc. References Omniifr::IRObject_impl::checkReadonly(), DB, and Omniifr::Creche< T >::release(). 00321 {
00322 DB(5,"Repository::create_sequence("<<bound<<",...)")
00323 checkReadonly();
00324 Creche<SequenceDef_impl> result(new SequenceDef_impl(bound));
00325 result->element_type_def(element_type);
00326 return result.release()->_this();
00327 }
|
|
|
Definition at line 299 of file Repository.cc. References Omniifr::IRObject_impl::checkReadonly(), DB, and Omniifr::Creche< T >::release(). 00300 {
00301 DB(5,"Repository::create_string("<<bound<<")")
00302 checkReadonly();
00303 Creche<StringDef_impl> result(new StringDef_impl(bound));
00304 return result.release()->_this();
00305 }
|
|
|
Definition at line 308 of file Repository.cc. References Omniifr::IRObject_impl::checkReadonly(), DB, and Omniifr::Creche< T >::release(). 00309 {
00310 DB(5,"Repository::create_wstring("<<bound<<")")
00311 checkReadonly();
00312 Creche<WstringDef_impl> result(new WstringDef_impl(bound));
00313 return result.release()->_this();
00314 }
|
|
|
Definition at line 568 of file Repository.cc. References _poa. Referenced by init(). 00569 {
00570 using namespace PortableServer;
00571 try
00572 {
00573 // POLICIES:
00574 // Lifespan =PERSISTENT // we can persist
00575 // Assignment =USER_ID // write our own oid
00576 // Uniqueness =[default] UNIQUE_ID // one servant per object
00577 // ImplicitActivation=[default] IMPLICIT_ACTIVATION // auto activation
00578 // RequestProcessing =[default] USE_ACTIVE_OBJECT_MAP_ONLY
00579 // ServantRetention =[default] RETAIN // stateless POA
00580 // Thread =SINGLE_THREAD_MODEL // keep it simple
00581
00582 CORBA::PolicyList policies;
00583 policies.length(3);
00584 policies[0]=rootPoa->create_lifespan_policy(PERSISTENT);
00585 policies[1]=rootPoa->create_id_assignment_policy(USER_ID);
00586 policies[2]=rootPoa->create_thread_policy(SINGLE_THREAD_MODEL);
00587
00588 // Create a new POA (and new POAManager) for this Repository.
00589 _poa=rootPoa->create_POA("IRpoa",POAManager::_nil(),policies);
00590 }
00591 catch(POA::AdapterAlreadyExists& ex) // create_POA
00592 {
00593 cerr<<"POA::AdapterAlreadyExists"<<endl;
00594 throw;
00595 }
00596 catch(POA::InvalidPolicy& ex) // create_POA
00597 {
00598 cerr<<"POA::InvalidPolicy: "<<ex.index<<endl;
00599 throw;
00600 }
00601 }
|
|
|
Implements Omniifr::IRObject_impl. Definition at line 81 of file Repository.h. 00081 {return dk_Repository;}
|
|
|
Definition at line 513 of file Repository.cc. References _idmap. Referenced by addId(), and lookup_id(). 00514 {
00515 map<string,Contained_impl*>::iterator pos =_idmap.find(id);
00516 if(pos==_idmap.end())
00517 return NULL;
00518 else
00519 return pos->second;
00520 }
|
|
|
Definition at line 97 of file Repository.cc. References _orb, and Omniifr::Contained_impl::name(). 00098 {
00099 TypeCode_var result =TypeCode::_nil();
00100
00101 const char* id;
00102 const char* name;
00103
00104 switch(tc->kind())
00105 {
00106 // TCs with Repository ID:
00107 case tk_objref:
00108 {
00109 InterfaceDef_var interfaceDef=lookupTc<InterfaceDef>(*this,tc,id,name);
00110 if(CORBA::is_nil(interfaceDef))
00111 result=TypeCode::_duplicate(tc); // nothing to add.
00112 else
00113 result=interfaceDef->type();
00114 }
00115 break;
00116
00117 case tk_struct:
00118 {
00119 StructDef_var structDef=lookupTc<StructDef>(*this,tc,id,name);
00120 if(CORBA::is_nil(structDef))
00121 {
00122 StructMemberSeq ms;
00123 ms.length(tc->member_count());
00124 for(ULong i=0; i<ms.length(); ++i)
00125 {
00126 TypeCode_var memberType=tc->member_type(i);
00127 ms[i].name =CORBA::string_dup(tc->member_name(i)); // [*]
00128 ms[i].type =get_canonical_typecode(memberType.in()); // recursive
00129 ms[i].type_def=IDLType::_nil();
00130 }
00131 result=_orb->create_struct_tc(id,name,ms);
00132 }
00133 else
00134 {
00135 result=structDef->type();
00136 }
00137 }
00138 break;
00139
00140 case tk_union:
00141 {
00142 UnionDef_var unionDef=lookupTc<UnionDef>(*this,tc,id,name);
00143 if(CORBA::is_nil(unionDef))
00144 {
00145 UnionMemberSeq ms;
00146 ms.length(tc->member_count());
00147 for(ULong i=0; i<ms.length(); ++i)
00148 {
00149 TypeCode_var memberType =tc->member_type(i);
00150 Any_var memberLabel =tc->member_label(i);
00151 ms[i].name =CORBA::string_dup(tc->member_name(i)); // [*]
00152 ms[i].label =memberLabel.in();
00153 ms[i].type =get_canonical_typecode(memberType.in()); // recursive
00154 ms[i].type_def=IDLType::_nil();
00155 }
00156 TypeCode_var discType =tc->discriminator_type();
00157 TypeCode_var canonDiscType =get_canonical_typecode(discType.in());
00158 result=_orb->create_union_tc(id,name,canonDiscType.in(),ms);
00159 }
00160 else
00161 {
00162 result=unionDef->type();
00163 }
00164 }
00165 break;
00166
00167 case tk_enum:
00168 {
00169 EnumDef_var enumDef=lookupTc<EnumDef>(*this,tc,id,name);
00170 if(CORBA::is_nil(enumDef))
00171 result=TypeCode::_duplicate(tc); // nothing to add.
00172 else
00173 result=enumDef->type();
00174 }
00175 break;
00176
00177 case tk_alias:
00178 {
00179 AliasDef_var aliasDef=lookupTc<AliasDef>(*this,tc,id,name);
00180 if(CORBA::is_nil(aliasDef))
00181 {
00182 TypeCode_var contType =tc->content_type();
00183 TypeCode_var canonContType =get_canonical_typecode(contType.in());
00184 result=_orb->create_alias_tc(id,name,canonContType.in());
00185 }
00186 else
00187 {
00188 result=aliasDef->type();
00189 }
00190 }
00191 break;
00192
00193 case tk_except:
00194 {
00195 ExceptionDef_var exceptionDef=lookupTc<ExceptionDef>(*this,tc,id,name);
00196 if(CORBA::is_nil(exceptionDef))
00197 {
00198 StructMemberSeq ms;
00199 ms.length(tc->member_count());
00200 for(ULong i=0; i<ms.length(); ++i)
00201 {
00202 TypeCode_var memberType=tc->member_type(i);
00203 ms[i].name =CORBA::string_dup(tc->member_name(i)); // [*]
00204 ms[i].type =get_canonical_typecode(memberType.in()); // recursive
00205 ms[i].type_def=IDLType::_nil();
00206 }
00207 result=_orb->create_exception_tc(id,name,ms);
00208 }
00209 else
00210 {
00211 result=exceptionDef->type();
00212 }
00213 }
00214 break;
00215
00216 case tk_sequence:
00217 {
00218 TypeCode_var contType =tc->content_type();
00219 TypeCode_var canonContType =get_canonical_typecode(contType.in());
00220 result=_orb->create_sequence_tc(tc->length(),canonContType.in());
00221 }
00222 break;
00223
00224 case tk_array:
00225 {
00226 TypeCode_var contType =tc->content_type();
00227 TypeCode_var canonContType =get_canonical_typecode(contType.in());
00228 result=_orb->create_array_tc(tc->length(),canonContType.in());
00229 }
00230 break;
00231
00232 // Primitives
00233 case tk_null:
00234 case tk_void:
00235 case tk_short:
00236 case tk_long:
00237 case tk_ushort:
00238 case tk_ulong:
00239 case tk_float:
00240 case tk_double:
00241 case tk_boolean:
00242 case tk_char:
00243 case tk_octet:
00244 case tk_any:
00245 case tk_TypeCode:
00246 case tk_Principal:
00247 case tk_string:
00248 #ifdef HAS_LongLong
00249 case tk_longlong:
00250 case tk_ulonglong:
00251 #endif
00252 #ifdef HAS_LongDouble
00253 case tk_longdouble:
00254 #endif
00255 case tk_wchar:
00256 case tk_wstring:
00257 case tk_fixed:
00258 {
00259 result=TypeCode::_duplicate(tc);
00260 }
00261 break;
00262
00263 // WTF? Not implemented in omniORB?
00264 case tk_value:
00265 case tk_value_box:
00266 case tk_native:
00267 case tk_abstract_interface:
00268 case tk_local_interface:
00269 {
00270 cerr<<"Arrgh! Help!"<<endl; //??
00271 result=TypeCode::_duplicate(tc);
00272 }
00273 break;
00274
00275 case _np_tk_indirect: // Internal to omniORB. We should never get this.
00276 assert(0);
00277
00278 } // end case. Note: no default, so that missing options are flagged by GCC.
00279
00280 assert(!CORBA::is_nil(result));
00281 return result._retn();
00282 } // end Repository_impl::get_canonical_typecode
|
|
|
Definition at line 285 of file Repository.cc. References _primitives. 00286 {
00287 if(kind==pk_null)
00288 return PrimitiveDef::_nil();
00289
00290 map<PrimitiveKind,PrimitiveDef_impl*>::iterator pos=_primitives.find(kind);
00291 if(pos==_primitives.end())
00292 throw NO_IMPLEMENT();
00293
00294 assert(pos->second);
00295 return pos->second->_this();
00296 }
|
|
||||||||||||||||
|
Definition at line 352 of file Repository.cc. References _DynAnyFactory, _omniINSPOA, _orb, _poa, _primitives, _readonly, Omniifr::IRObject_impl::activateObjectWithId(), createPoa(), IFELSE_OMNIORB4, orb, persist, readonly, and Omniifr::Persist::startup(). 00357 {
00358 _orb=orb; // Store a reference to orb.
00359 _readonly=readonly;
00360
00361 const char* action=""; // Use this variable to help report errors.
00362 try
00363 {
00364 action="resolve initial reference 'omniINSPOA'";
00365 CORBA::Object_var obj =orb->resolve_initial_references("omniINSPOA");
00366 _omniINSPOA=PortableServer::POA::_narrow(obj);
00367 if(CORBA::is_nil(_omniINSPOA))
00368 throw CORBA::OBJECT_NOT_EXIST(0,CORBA::COMPLETED_NO);
00369
00370 action="resolve initial reference 'RootPOA'";
00371 obj=orb->resolve_initial_references("RootPOA");
00372 PortableServer::POA_var rootPoa =PortableServer::POA::_narrow(obj);
00373 if(CORBA::is_nil(rootPoa))
00374 throw CORBA::OBJECT_NOT_EXIST(0,CORBA::COMPLETED_NO);
00375
00376 action="create Interface Repository's POA";
00377 createPoa(rootPoa.in());
00378
00379 action="resolve initial reference 'DynAnyFactory'";
00380 obj=_orb->resolve_initial_references("DynAnyFactory");
00381 _DynAnyFactory=DynamicAny::DynAnyFactory::_narrow(obj);
00382 if(CORBA::is_nil(_DynAnyFactory))
00383 throw CORBA::OBJECT_NOT_EXIST(0,CORBA::COMPLETED_NO);
00384
00385 action="create primitives."; // (They auto-activate)
00386 _primitives[pk_void] =new PrimitiveDef_impl(pk_void);
00387 _primitives[pk_short] =new PrimitiveDef_impl(pk_short);
00388 _primitives[pk_long] =new PrimitiveDef_impl(pk_long);
00389 _primitives[pk_ushort] =new PrimitiveDef_impl(pk_ushort);
00390 _primitives[pk_ulong] =new PrimitiveDef_impl(pk_ulong);
00391 _primitives[pk_float] =new PrimitiveDef_impl(pk_float);
00392 _primitives[pk_double] =new PrimitiveDef_impl(pk_double);
00393 _primitives[pk_boolean] =new PrimitiveDef_impl(pk_boolean);
00394 _primitives[pk_char] =new PrimitiveDef_impl(pk_char);
00395 _primitives[pk_octet] =new PrimitiveDef_impl(pk_octet);
00396 _primitives[pk_any] =new PrimitiveDef_impl(pk_any);
00397 _primitives[pk_TypeCode] =new PrimitiveDef_impl(pk_TypeCode);
00398 _primitives[pk_Principal] =new PrimitiveDef_impl(pk_Principal);
00399 _primitives[pk_string] =new PrimitiveDef_impl(pk_string);
00400 _primitives[pk_objref] =new PrimitiveDef_impl(pk_objref);
00401 #ifdef HAS_LongLong
00402 _primitives[pk_longlong] =new PrimitiveDef_impl(pk_longlong);
00403 _primitives[pk_ulonglong] =new PrimitiveDef_impl(pk_ulonglong);
00404 #endif
00405 #ifdef HAS_LongDouble
00406 _primitives[pk_longdouble]=new PrimitiveDef_impl(pk_longdouble);
00407 #endif
00408 _primitives[pk_wchar] =new PrimitiveDef_impl(pk_wchar);
00409 _primitives[pk_wstring] =new PrimitiveDef_impl(pk_wstring);
00410
00411 action="activate the Repository's POA";
00412 PortableServer::POAManager_var pman =_poa->the_POAManager();
00413 pman->activate();
00414
00415 action="activate the INS POA";
00416 pman =_omniINSPOA->the_POAManager();
00417 pman->activate();
00418
00419 action="start up persistency";
00420 if(persist)
00421 persist->startup();
00422
00423 action="activate InterfaceRepository 'DefaultRepository'";
00424 activateObjectWithId("DefaultRepository");
00425 }
00426 catch(CORBA::ORB::InvalidName& ex) // resolve_initial_references
00427 {
00428 cerr<<"Failed to "<<action<<". InvalidName"<<endl;
00429 throw;
00430 }
00431 catch(CORBA::TRANSIENT& ex) // _narrow()
00432 {
00433 cerr<<"Failed to "<<action<<". TRANSIENT"<<endl;
00434 throw;
00435 }
00436 catch(CORBA::OBJECT_NOT_EXIST& ex) // _narrow()
00437 {
00438 cerr<<"Failed to "<<action<<". OBJECT_NOT_EXIST"<<endl;
00439 throw;
00440 }
00441 catch(CORBA::SystemException& ex)
00442 {
00443 cerr<<"Failed to "<<action<<"."
00444 IFELSE_OMNIORB4(" "<<ex._name()<<" ("<<ex.NP_minorString()<<")",) <<endl;
00445 throw;
00446 }
00447 catch(CORBA::Exception& ex)
00448 {
00449 cerr<<"Failed to "<<action<<"." IFELSE_OMNIORB4(" "<<ex._name(),) <<endl;
00450 throw;
00451 }
00452 }
|
|
|
Definition at line 58 of file Repository.h. References _inst. Referenced by main(). 00058 {return _inst;}
|
|
|
typedef: RepositoryId
Definition at line 83 of file Repository.cc. 00084 {
00085 DB(7,"lookup_id(\""<<search_id<<"\")")
00086 if(!( 0==strcmp(search_id,"IDL:omg.org/CORBA/Object:1.0") ||
00087 0==strcmp(search_id,"IDL:omg.org/CORBA/ValueBase:1.0") ))
00088 {
00089 Contained_impl* result =findId(search_id);
00090 if(result)
00091 return result->_this();
00092 }
00093 return Contained::_nil();
00094 }
|
|
|
Save this object's state to a stream.
Implements Omniifr::IRObject_impl. Definition at line 683 of file Repository.cc. References _anonymous, Omniifr::FixedDef_impl::output(), and Omniifr::Container_impl::outputContents(). Referenced by Omniifr::Persist::checkpoint(). 00684 {
00685 // Output anonymous types.
00686 for(set<IDLType_impl*>::iterator i=_anonymous.begin();
00687 i!=_anonymous.end();
00688 ++i)
00689 {
00690 (**i).output(os);
00691 }
00692 // Output named types.
00693 outputContents(os);
00694 }
|
|
|
Definition at line 101 of file Repository.h. References _readonly. 00101 { return _readonly; }
|
|
|
This is the top-level reincarnate() method, it calls all of the other ones.
Reimplemented from Omniifr::IRObject_impl. Definition at line 604 of file Repository.cc. References Omniifr::PersistNode::_child, Omniifr::PersistNode::child(), DB, Omniifr::Creche< T >::get(), Omniifr::Container_impl::recreate(), Omniifr::IRObject_impl::reincarnate(), and Omniifr::Creche< T >::release(). Referenced by Omniifr::Persist::startup(). 00605 {
00606 // Reincarnation is a two-stage process:
00607 // Firstly we must recreate all of the CORBA objects.
00608 // Secondly we recreate the links between those objects.
00609
00610 map<IRObject_impl*,PersistNode*> todo;
00611
00612 // Recreate anonymous types.
00613 PersistNode* idlTypeNode;
00614 map<string,PersistNode*>::const_iterator i;
00615 if(idlTypeNode=node.child("StringDef"))
00616 {
00617 for(i=idlTypeNode->_child.begin(); i!=idlTypeNode->_child.end(); ++i)
00618 {
00619 CORBA::ULong bound =i->second->attrLong("bound");
00620 DB(5,"Repository::reincarnate string("<<bound<<")")
00621 Creche<StringDef_impl> servant(new StringDef_impl(bound));
00622 servant.release( i->first.c_str() ); // Ignore servant
00623 }
00624 }
00625 if(idlTypeNode=node.child("WstringDef"))
00626 {
00627 for(i=idlTypeNode->_child.begin(); i!=idlTypeNode->_child.end(); ++i)
00628 {
00629 CORBA::ULong bound =i->second->attrLong("bound");
00630 DB(5,"Repository::reincarnate wstring("<<bound<<")")
00631 Creche<WstringDef_impl> servant(new WstringDef_impl(bound));
00632 servant.release( i->first.c_str() ); // Ignore servant
00633 }
00634 }
00635 if(idlTypeNode=node.child("SequenceDef"))
00636 {
00637 for(i=idlTypeNode->_child.begin(); i!=idlTypeNode->_child.end(); ++i)
00638 {
00639 CORBA::ULong bound =i->second->attrLong("bound");
00640 DB(5,"Repository::reincarnate sequence("<<bound<<")")
00641 Creche<SequenceDef_impl> servant(new SequenceDef_impl(bound));
00642 todo[servant.get()]=i->second;
00643 servant.release( i->first.c_str() ); // Ignore servant
00644 }
00645 }
00646 if(idlTypeNode=node.child("ArrayDef"))
00647 {
00648 for(i=idlTypeNode->_child.begin(); i!=idlTypeNode->_child.end(); ++i)
00649 {
00650 CORBA::ULong length =i->second->attrLong("length");
00651 DB(5,"Repository::reincarnate array("<<length<<")")
00652 Creche<ArrayDef_impl> servant(new ArrayDef_impl(length));
00653 todo[servant.get()]=i->second;
00654 servant.release( i->first.c_str() ); // Ignore servant
00655 }
00656 }
00657 if(idlTypeNode=node.child("FixedDef"))
00658 {
00659 for(i=idlTypeNode->_child.begin(); i!=idlTypeNode->_child.end(); ++i)
00660 {
00661 CORBA::UShort digits =i->second->attrLong("digits");
00662 CORBA::Short scale =i->second->attrLong("scale");
00663 DB(5,"Repository::reincarnate fixed("<<digits<<","<<scale<<")")
00664 Creche<FixedDef_impl> servant(new FixedDef_impl(digits,scale));
00665 servant.release( i->first.c_str() ); // Ignore servant
00666 }
00667 }
00668
00669 // Recreate contained objects.
00670 recreate(node.child("NAME"),todo/*OUT*/);
00671
00672 // Create links.
00673 for(map<IRObject_impl*,PersistNode*>::iterator i =todo.begin();
00674 i!=todo.end();
00675 ++i)
00676 {
00677 DB(5,"Repository::reincarnate "<<i->second->attrString("id").c_str())
00678 i->first->reincarnate(*i->second);
00679 }
00680 }
|
|
|
Definition at line 560 of file Repository.cc. References _anonymous. 00561 {
00562 set<IDLType_impl*>::iterator pos =_anonymous.find(anon);
00563 assert(pos!=_anonymous.end());
00564 _anonymous.erase(pos);
00565 this->_remove_ref(); // Removes the ref added during ::addAnonymous()
00566 }
|
|
|
Definition at line 505 of file Repository.cc. References _idmap. 00506 {
00507 map<string,Contained_impl*>::iterator pos =_idmap.find(id);
00508 assert(pos!=_idmap.end());
00509 _idmap.erase(pos);
00510 }
|
|
|
Destroys this object, without first checking for dependencies.
Implements Omniifr::Container_impl. Definition at line 467 of file Repository.cc. References _primitives. 00468 {
00469 for(map<PrimitiveKind,PrimitiveDef_impl*>::iterator i=_primitives.begin();
00470 i!=_primitives.end();
00471 ++i)
00472 {
00473 assert(i->second);
00474 i->second->uncheckedDestroy();
00475 }
00476 _primitives.clear();
00477 }
|
|
|
Definition at line 86 of file Repository.h. Referenced by addAnonymous(), output(), and removeAnonymous(). |
|
|
Definition at line 63 of file Repository.h. Referenced by init(). |
|
|
Definition at line 87 of file Repository.h. Referenced by addId(), findId(), and removeId(). |
|
|
Definition at line 80 of file Repository.cc. Referenced by inst(). |
|
|
Definition at line 62 of file Repository.h. Referenced by _default_POA(), and init(). |
|
|
Definition at line 60 of file Repository.h. Referenced by get_canonical_typecode(), and init(). |
|
|
Definition at line 61 of file Repository.h. Referenced by createPoa(), and init(). |
|
|
Definition at line 85 of file Repository.h. Referenced by get_primitive(), init(), and uncheckedDestroy(). |
|
|
Definition at line 88 of file Repository.h. Referenced by init(), and readonly(). |
1.4.1