Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

PsPvmNameServer.cxx

Go to the documentation of this file.
00001 /*
00002  * This file is part of openMask © INRIA, CNRS, Universite de Rennes 1 1993-2002, thereinafter the Software
00003  * 
00004  * The Software has been developped within the Siames Project. 
00005  * INRIA, the University of Rennes 1 and CNRS jointly hold intellectual property rights
00006  * 
00007  * The Software has been registered with the Agence pour la Protection des
00008  * Programmes (APP) under registration number IDDN.FR.001.510008.00.S.P.2001.000.41200
00009  *  
00010  * This file may be distributed under the terms of the Q Public License
00011  * version 1.0 as defined by Trolltech AS of Norway and appearing in the file
00012  * LICENSE.QPL included in the packaging of this file.
00013  *
00014  * Licensees holding valid specific licenses issued by INRIA, CNRS or Université de Rennes 1 
00015  * for the software may use this file in accordance with that specific license
00016  *
00017  */
00018 #ifdef _PVM
00019 #include "PsPvmNameServer.h"
00020 
00021 #include <stdio.h>
00022 #include "pvm3.h"
00023 #include "PsnSvmLink.h"
00024 #include "PsController.h"
00025 #include "PsnPvmSvm.h"
00026 
00027 PsPvmNameServer::PsPvmNameServer ( int mainNameServerSiteId, PsNameServer & nameServer ) :
00028   PsClassicalNameServer ( nameServer.getCanonicalRepresentation() ),
00029   _mainNameServerSiteId ( mainNameServerSiteId )
00030 {
00031 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00032    cerr<<"PsPvmNameServer::PsPvmNameServer"<<endl;
00033 #endif
00034 
00035    correspondenceContainerType::const_iterator i ;
00036    for ( i = _stringToIdCorrespondenceContainer.begin() ; 
00037          i != _stringToIdCorrespondenceContainer.end();
00038          ++i ) 
00039       {
00040          _idToNamesUsingIdContainer.insert(placeOfNamesContainerType::value_type((*i).second,
00041                                                                                  new list<PsName *>(nameServer.getNamesOfId ((*i).second) ) ) ) ;
00042 
00043          assert ( (*_idToNamesUsingIdContainer.find((*i).second)).second->size() == _tableNbInstances[(*i).second] ) ;
00044       }
00045 
00046    //make sure the constructed PvmName server is compatible with the central name server
00047    int oldbufid = pvm_setsbuf ( 0 ) ; //save the current send buffer 
00048 
00049   if ( oldbufid < 0 )
00050     {
00051       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_setsbuf error "<<oldbufid<<endl;
00052       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00053     }
00054 
00055   int bufid = pvm_initsend( PsnPvmSvm::pvmDataEncoding ) ; 
00056   
00057   if ( bufid < 0 )
00058     {
00059       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_initsend error "<<bufid<<endl;
00060       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00061     }
00062   
00063   //pack a timeStamp
00064   long toto = 0 ;
00065   int infot = pvm_pklong ( &toto, 1, 1 ) ;
00066 
00067   //pack the current name server
00068   
00069   long numberOfPairs = _stringToIdCorrespondenceContainer.size() ;
00070   int info = pvm_pklong ( &numberOfPairs, 1, 1 ) ;
00071 
00072   long verifySize = 0 ;
00073   int stringLength ;
00074   for ( correspondenceContainerType::const_iterator i = _stringToIdCorrespondenceContainer.begin() ;
00075         i != _stringToIdCorrespondenceContainer.end() ;
00076         ++i )
00077     {
00078       ++verifySize ;
00079       stringLength = (*i).first.getStringLength() + 1 ;
00080       pvm_pkint ( const_cast<int *> ( &stringLength), 1, 1 ) ;
00081       pvm_pkstr ( const_cast<char *>((*i).first.getCString()) ) ;
00082       pvm_pklong ( const_cast<long *> (&((*i).second)) , 1, 1 ) ;
00083     }
00084 
00085   assert (verifySize == numberOfPairs ) ;
00086 
00087   if (info < 0 )
00088     {
00089       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_pkstr error "<<info<<endl;
00090       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00091     }
00092 
00093   info = pvm_send (_mainNameServerSiteId, PsnPvmMessage::NameServiceVerifyLocalNameServer ) ;
00094 
00095   if (info < 0 )
00096     {
00097       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_send error "<<info<<endl;
00098       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00099     }
00100           
00101   info = pvm_setsbuf ( oldbufid ) ; //replace the current send buffer
00102 
00103   if (info < 0 )
00104     {
00105       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_setsbuf error "<<info<<endl;
00106       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00107     }
00108 
00109   //save the current receive buffer
00110   oldbufid = pvm_setrbuf ( 0 ) ;
00111 
00112   //wait for the answer
00113   bufid = pvm_recv (_mainNameServerSiteId, PsnPvmMessage::NameServiceVerifyResult ) ;
00114           
00115   if ( bufid < 0 )
00116     {
00117       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_recv error "<<bufid<<endl;
00118       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00119     }
00120   
00121   int numberOfIncompatibilities ;
00122   info = pvm_upkint ( & numberOfIncompatibilities, 1, 1 ) ;
00123   
00124 
00125   if (info < 0 )
00126     {
00127       cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_upkint error "<<info<<endl;
00128       if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00129     }
00130 
00131   PsName::idType oldId ;
00132   PsName::idType newId ;
00133   map<PsName::idType, PsName::idType> listOfNeededConversions ;
00134   for ( int i = 0 ; i < numberOfIncompatibilities ; ++ i )
00135      {
00136         info = pvm_upklong ( & oldId, 1, 1 ) ;
00137 
00138         if (info < 0 )
00139            {
00140               cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_upklong error "<<info<<endl;
00141               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00142            }
00143 
00144         info = pvm_upklong ( & newId, 1, 1 ) ;  
00145         if (info < 0 )
00146            {
00147               cerr<<"PsPvmNameServer::PsPvmNameServer: pvm_upklong error "<<info<<endl;
00148               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00149            }
00150         
00151         listOfNeededConversions[oldId] = newId ;
00152 
00153      }
00154 
00155   
00156   map<PsName::idType, PsName::idType>::iterator  j = listOfNeededConversions.begin() ;
00157   while ( j != listOfNeededConversions.end() )
00158      {
00159         oldId = (*j).first ;
00160         newId = (*j).second ;
00161 
00162         cerr<<"PsPvmNameServer::PsPvmNameServer: converting "<<oldId<<" to "<<newId<<endl;
00163 
00164         assert ( oldId < _nextIdentifier ) ;
00165 
00166         if ( newId >= _nextIdentifier )
00167            {
00168               cerr<<"PsPvmNameServer::PsPvmNameServer: updating nextIdentifier from "<<_nextIdentifier<<" to "<< newId + 1 <<endl;
00169               _nextIdentifier = newId + 1 ;
00170            }
00171 
00172         //replace the id in the name server warning : newId could be known or unknown from the name server
00173         bool newIdPresent = ( _tableNbInstances.find(newId) != _tableNbInstances.end() ) ;
00174 
00175         // - first take care of the number of references to the string corresponding to each Id
00176         referenceCountingContainerType::iterator oldRefCount = _tableNbInstances.find(oldId) ;
00177         referenceCountingContainerType::iterator newRefCount = _tableNbInstances.find(newId) ;
00178 
00179         int referencesToOldId = (*oldRefCount).second ;
00180         _tableNbInstances.erase ( oldRefCount ) ;
00181 
00182 
00183         if ( newIdPresent )
00184            {
00185               assert ( newRefCount != _tableNbInstances.end() ) ;
00186               int referencesToNewId = (*newRefCount).second ;
00187               _tableNbInstances.erase ( newRefCount ) ;
00188               _tableNbInstances.insert(referenceCountingContainerType::value_type(oldId, referencesToNewId ) ) ;
00189            }
00190 
00191         //    - only insert once the eventual copy has been archived
00192         _tableNbInstances.insert(referenceCountingContainerType::value_type(newId, referencesToOldId ) ) ;
00193 
00194 
00195         // - then take care of the list of PsName instances of each Id        
00196         placeOfNamesContainerType::iterator oldNameList = _idToNamesUsingIdContainer.find(oldId) ;
00197         placeOfNamesContainerType::iterator newNameList = _idToNamesUsingIdContainer.find(newId) ;
00198 
00199         list<PsName *> * referencesToOldList = (*oldNameList).second ;
00200         _idToNamesUsingIdContainer.erase ( oldNameList ) ;
00201 
00202         if ( newIdPresent )
00203            {
00204               assert ( newNameList != _idToNamesUsingIdContainer.end() ) ;
00205               list<PsName *> * referencesToNewList = (*newNameList).second ;
00206               _idToNamesUsingIdContainer.erase ( newNameList ) ;
00207               _idToNamesUsingIdContainer.insert(placeOfNamesContainerType::value_type(oldId, referencesToNewList) ) ;
00208            }
00209 
00210         //    - only insert once the eventual copy has been archived
00211         _idToNamesUsingIdContainer.insert(placeOfNamesContainerType::value_type(newId, referencesToOldList) ) ;
00212 
00213         
00214         // - then take care of the PsString to Id references 
00215         PsString newStringOfNewId ( (*(*_fastStringAccessTable.find(oldId)).second ).first ) ;
00216         _fastStringAccessTable.erase ( _fastStringAccessTable.find ( oldId ) ) ;
00217         _stringToIdCorrespondenceContainer.erase ( _stringToIdCorrespondenceContainer.find (newStringOfNewId) );
00218 
00219         if ( newIdPresent )
00220            {
00221               PsString newStringOfOldId ( (*(*_fastStringAccessTable.find(newId)).second ).first ) ;
00222               _fastStringAccessTable.erase ( _fastStringAccessTable.find ( newId ) ) ;
00223               _stringToIdCorrespondenceContainer.erase ( _stringToIdCorrespondenceContainer.find (newStringOfOldId) );
00224               pair<correspondenceContainerType::iterator,bool> insertRes = _stringToIdCorrespondenceContainer.insert(correspondenceContainerType::value_type(newStringOfOldId, oldId)) ;
00225               _fastStringAccessTable[oldId] = insertRes.first ;
00226            }
00227         
00228         //    - only insert once the eventual copy has been archived
00229         pair<correspondenceContainerType::iterator,bool> res = _stringToIdCorrespondenceContainer.insert(correspondenceContainerType::value_type(newStringOfNewId, newId)) ;
00230         _fastStringAccessTable[newId] = res.first ;
00231         
00232 
00233         //here, newId and oldId have been exchanged in tha data structures, but not in the PsNames nor in the listOfNeededConversions. Therefore, we will replace the PsName containing oldId with PsNames containing newId, and change the list Ofneeded conversions so that the conversion from newId to anotherId is replaced by a conversion of oldId to anotherId
00234         
00235         // - replace the id in the PsNames
00236         newNameList = _idToNamesUsingIdContainer.find ( newId ) ;
00237         
00238         assert ( newNameList != _idToNamesUsingIdContainer.end() ) ;
00239         assert ( (*newNameList).second != NULL ) ;
00240         assert ( (*newNameList).second->size() == _tableNbInstances[ newId ] ) ;
00241         
00242         for ( list<PsName *>::iterator listIter = (*newNameList).second->begin() ;
00243               listIter != (*newNameList).second->end() ;
00244               ++listIter )
00245            {
00246               changeNamesId (*listIter, oldId, newId) ;
00247            }
00248 
00249         listOfNeededConversions.erase (j) ;
00250 
00251         if ( newIdPresent )
00252            {
00253               // - update the conversion from newId to anotherId by a conversion of oldId to anotherId
00254               map<PsName::idType, PsName::idType>::iterator k = listOfNeededConversions.find ( newId ) ;
00255               assert ( k != listOfNeededConversions.end() ) ;
00256 
00257               PsName::idType anotherId = (*k).second ;
00258 
00259               listOfNeededConversions.erase ( k ) ;
00260               
00261               if ( anotherId != oldId )
00262                  {
00263                     listOfNeededConversions[oldId] = anotherId ;
00264                  }
00265 
00266               // - update the PsName so that assertions won't fail and for final permutations
00267               newNameList = _idToNamesUsingIdContainer.find ( oldId ) ;
00268               for ( list<PsName *>::iterator listIter = (*newNameList).second->begin() ;
00269                     listIter != (*newNameList).second->end() ;
00270                     ++listIter )
00271                  {
00272                     changeNamesId (*listIter, newId, oldId) ;
00273                  }
00274               
00275               cerr<<"PsPvmNameServer::PsPvmNameServer: "<<oldId<<" will now be converted in "<<anotherId<<endl; 
00276            }
00277 
00278         j = listOfNeededConversions.begin() ;
00279      }
00280 
00281   printToStream ( cout, "\n" ) ;
00282   
00283   cerr<<"Done "<<endl;
00284 
00285 
00286   //restore old receive buffer
00287   info = pvm_setrbuf ( oldbufid );
00288   assert (info != PvmBadParam ) ;
00289   assert (info != PvmNoSuchBuf ) ;
00290 
00291 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00292    cerr<<"PsPvmNameServer::PsPvmNameServer done"<<endl;
00293 #endif
00294 
00295 }
00296 
00297 
00298 PsPvmNameServer::~PsPvmNameServer () 
00299 {
00300 
00301 } 
00302 
00303 long
00304 PsPvmNameServer::getIdentifierAsFrom(const PsString & name, long * nextId)
00305 {
00306 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00307    cerr<<"PsPvmNameServer::getIdentifierAsFrom"<<endl;
00308 #endif    
00309 
00310   correspondenceContainerType::iterator i;
00311   i = _stringToIdCorrespondenceContainer.find( name );
00312   
00313   if (i == _stringToIdCorrespondenceContainer.end()) 
00314     {
00315       //we are going to change the values contained in the PsNameServer
00316       lock() ; 
00317       
00318       i = _stringToIdCorrespondenceContainer.find( name ) ; //name might have been added by an other thread
00319       
00320       if (i == _stringToIdCorrespondenceContainer.end() ) //we have to add nom
00321         { 
00322 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00323           cerr<<"   PsPvmNameServer::getIdentifierAsFrom ("<<name<<") on central name server"<<endl;
00324 #endif    
00325           //ask the central name server for the id corresponding to nom
00326 
00327           int oldbufid = pvm_setsbuf ( 0 ) ; //save the current send buffer 
00328 
00329           if ( oldbufid < 0 )
00330             {
00331               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_setsbuf error "<<oldbufid<<endl;
00332               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00333             }
00334 
00335           int bufid = pvm_initsend( PsnPvmSvm::pvmDataEncoding ) ; 
00336 
00337           //pack a timeStamp
00338           long toto = 0 ;
00339           int infot = pvm_pklong ( &toto, 1, 1 ) ;
00340 
00341           if ( bufid < 0 )
00342             {
00343               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_initsend error "<<bufid<<endl;
00344               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00345             }
00346           int numberOfCaracters = name.getStringLength () + 1 ;
00347           int info = pvm_pkint ( &numberOfCaracters , 1, 1 ) ;
00348 
00349           info = pvm_pkstr ( const_cast<char *> (name.getCString()) ) ;
00350 
00351           if (info < 0 )
00352             {
00353               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_pkstr error "<<info<<endl;
00354               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00355             }
00356 
00357           info = pvm_send (_mainNameServerSiteId, PsnPvmMessage::NameServiceGetId ) ;
00358 
00359           if (info < 0 )
00360             {
00361               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_send error "<<info<<endl;
00362               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00363             }
00364           
00365           info = pvm_setsbuf ( oldbufid ) ; //replace the current send buffer
00366 
00367           if (info < 0 )
00368             {
00369               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_setsbuf error "<<info<<endl;
00370               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00371             }
00372 
00373           //save the current receive buffer
00374           oldbufid = pvm_setrbuf ( 0 ) ;
00375 
00376           //wait for the answer
00377           bufid = pvm_recv (_mainNameServerSiteId, PsnPvmMessage::NameServiceReturnId ) ;
00378           
00379           if ( bufid < 0 )
00380             {
00381               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_recv error "<<bufid<<endl;
00382               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00383             }
00384           
00385           PsName::idType requestedId ;
00386           info = pvm_upklong ( & requestedId, 1, 1 ) ;
00387           
00388 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00389           cerr<<"   got "<<requestedId<<" from the central name server"<<endl;
00390 #endif    
00391           if (info < 0 )
00392             {
00393               cerr<<"PsPvmNameServer::getIdentifierAsFrom: pvm_upklong error "<<info<<endl;
00394               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00395             }
00396 
00397           //restore old receive buffer
00398           info = pvm_setrbuf ( oldbufid );
00399           assert (info != PvmBadParam ) ;
00400           assert (info != PvmNoSuchBuf ) ;
00401 
00402           pair<correspondenceContainerType::iterator,bool> res = _stringToIdCorrespondenceContainer.insert(correspondenceContainerType::value_type(name,requestedId)) ; 
00403           _fastStringAccessTable[requestedId] = res.first ;
00404           
00405           *nextId = requestedId + 1 ;
00406           
00407           i = res.first ;
00408         }
00409       
00410       unlock() ;
00411     }
00412 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00413   cerr<<"PsPvmNameServer::getIdentifierAsFrom returning "<<(*i).second<<endl;
00414 #endif    
00415   return (*i).second;
00416 }
00417 
00418 const PsString & 
00419 PsPvmNameServer::getStringAssociatedTo (PsName::idType id)
00420 {
00421 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00422    cerr<<"PsPvmNameServer::getStringAssociatedTo ("<<id<<")"<<endl;
00423 #endif    
00424  if ( _fastStringAccessTable.find(id) == _fastStringAccessTable.end() )
00425     {
00426       lock () ;
00427 
00428       if ( _fastStringAccessTable.find(id) == _fastStringAccessTable.end() ) 
00429         //the request might have allready been fullfilled
00430         {
00431           //ask the central name server for the string
00432 
00433           int oldbufid = pvm_setsbuf ( 0 ) ; //save the current send buffer 
00434           
00435           if ( oldbufid < 0 )
00436             {
00437               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_setsbuf error "<<oldbufid<<endl;
00438               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00439             }
00440           
00441           int bufid = pvm_initsend( PsnPvmSvm::pvmDataEncoding ) ; 
00442           
00443           //pack a timeStamp
00444           long toto = 0 ;
00445           int infot = pvm_pklong ( &toto, 1, 1 ) ;
00446 
00447           if ( bufid < 0 )
00448             {
00449               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_initsend error "<<bufid<<endl;
00450               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00451             }
00452           
00453           int info = pvm_pklong ( &id, 1, 1 ) ;;
00454           
00455           if (info < 0 )
00456             {
00457               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_pklong error "<<info<<endl;
00458               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00459             }
00460           
00461           info = pvm_send (_mainNameServerSiteId, PsnPvmMessage::NameServiceGetString ) ;
00462           
00463           if (info < 0 )
00464             {
00465               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_send error "<<info<<endl;
00466               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00467             }
00468           
00469           info = pvm_setsbuf ( oldbufid ) ; //replace the current send buffer
00470           
00471           if (info < 0 )
00472             {
00473               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_setsbuf error "<<info<<endl;
00474               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00475             }
00476           
00477           //save the current receive buffer
00478           oldbufid = pvm_setrbuf ( 0 ) ;
00479           
00480           //wait for the answer
00481           bufid = pvm_recv (_mainNameServerSiteId, PsnPvmMessage::NameServiceReturnString ) ;
00482           
00483           if ( bufid < 0 )
00484             {
00485               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_recv error "<<bufid<<endl;
00486               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00487             }
00488           
00489           int bytes, msgtag, tid ;
00490           
00491           info = pvm_bufinfo ( bufid, &bytes, &msgtag, & tid ) ;
00492       
00493           if (info < 0 )
00494             {
00495               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_bufinfo error "<<info<<endl;
00496               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00497             }
00498           
00499           char * resultingString = new char [bytes] ;
00500           
00501           info = pvm_upkstr ( resultingString ) ;
00502           
00503           if (info < 0 )
00504             {
00505               cerr<<"PsPvmNameServer::getStringAssociatedTo: pvm_upkstr error "<<info<<endl;
00506               if (PsController::warningLevel == PsController::FatalWarnings ) exit (2) ;
00507             }
00508 
00509           //restore old receive buffer
00510           info = pvm_setrbuf ( oldbufid );
00511           assert (info != PvmBadParam ) ;
00512           assert (info != PvmNoSuchBuf ) ;
00513           
00514           //insert the new pair in the data structures
00515           pair<correspondenceContainerType::iterator,bool> res = _stringToIdCorrespondenceContainer.insert(correspondenceContainerType::value_type(PsString (resultingString), id)) ; 
00516           _fastStringAccessTable[id] = res.first ;
00517           
00518           if ( id >= _nextIdentifier ) 
00519             {
00520               _nextIdentifier = id + 1 ;
00521             }
00522         }
00523       
00524       unlock() ;
00525     }
00526 #ifdef _DEBUGDISTRIBUTEDNAMESERVER
00527  cerr<<"PsPvmNameServer::getStringAssociatedTo ("<<id<<") ="<<(*(*_fastStringAccessTable.find(id)).second).first<<endl;
00528 #endif    
00529   return  (*(*_fastStringAccessTable.find(id)).second).first ;
00530 }
00531 
00532 
00533 
00534 const PsString & 
00535 PsPvmNameServer::getStringAssociatedTo (PsName::idType id) const 
00536 {
00537   if ( _fastStringAccessTable.find(id) == _fastStringAccessTable.end() )
00538     {
00539       return const_cast<PsPvmNameServer *>(this)->getStringAssociatedTo( id ) ;
00540     }
00541   else 
00542     {
00543       return  (*(*_fastStringAccessTable.find(id)).second).first ;
00544     }
00545 }
00546 
00547 bool PsPvmNameServer::includes (const PsNameServer & otherNameServer ) 
00548 {
00549    return true ;
00550 }
00551 
00552 void PsPvmNameServer::deleted(PsName::idType id, PsName * name)
00553 {
00554 }
00555 
00556 void PsPvmNameServer::created(PsName::idType id, PsName * )
00557 {
00558 }
00559 #endif

logo OpenMask

Documentation generated on Mon Nov 25 15:25:02 2002

Generated with doxygen 1.2.12 by Dimitri van Heesch ,   1997-2001