// GsoapRegistry.cxx #include "dial_ws/GsoapRegistry.h" #include #include using std::map; using std::ostream; using dial::GsoapRegistry; //********************************************************************** // Local data. //********************************************************************** typedef map InitMap; typedef map ServerMap; typedef map NamespaceMap; namespace { InitMap& inits() { static InitMap imap; return imap; } NamespaceMap& nspaces() { static NamespaceMap nmap; return nmap; } ServerMap& servers() { static ServerMap smap; return smap; } } //********************************************************************** // Return a namespace. int GsoapRegistry:: insert(Name name, Init* init, Server* srv, Namespace* pns) { if ( inits().find(name) != inits().end() ) return 1; if ( servers().find(name) != servers().end() ) return 2; if ( nspaces().find(name) != nspaces().end() ) return 3; inits()[name] = init; servers()[name] = srv; nspaces()[name] = pns; return 0; } //********************************************************************** // Return an initialization function. GsoapRegistry::Init* GsoapRegistry::init(Name name) { InitMap::const_iterator iini = inits().find(name); if ( iini != inits().end() ) { return iini->second; } return 0; } //********************************************************************** // Return a server function. GsoapRegistry::Server* GsoapRegistry::server(Name name) { ServerMap::const_iterator isrv = servers().find(name); if ( isrv != servers().end() ) { return isrv->second; } return 0; } //********************************************************************** // Return a namespace. GsoapRegistry::Namespace* GsoapRegistry::nspace(Name name) { NamespaceMap::const_iterator insp = nspaces().find(name); if ( insp != nspaces().end() ) { return insp->second; } return 0; } //********************************************************************** // Display. ostream& GsoapRegistry::display(ostream& str) { ServerMap::size_type count = servers().size(); str << "GSOAP registry holds " << count << " entr"; if ( count == 1 ) str << "y"; else str << "ies"; if ( count > 0 ) { str << ":"; for ( ServerMap::const_iterator isrv=servers().begin(); isrv!=servers().end(); ++isrv ) { str << "\n " << isrv->first; } } return str; } //********************************************************************** // Display to cout.. ostream& GsoapRegistry::display() { return display(std::cout); } //**********************************************************************