summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Initialize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Initialize.cpp')
-rw-r--r--cpp/src/Ice/Initialize.cpp90
1 files changed, 31 insertions, 59 deletions
diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp
index ca108e8db85..90d37f16bc1 100644
--- a/cpp/src/Ice/Initialize.cpp
+++ b/cpp/src/Ice/Initialize.cpp
@@ -89,66 +89,21 @@ Ice::createProperties()
}
PropertiesPtr
-Ice::createProperties(StringSeq& args)
+Ice::createProperties(StringSeq& args, const PropertiesPtr& defaults)
{
- return new PropertiesI(args);
+ return new PropertiesI(args, defaults);
}
PropertiesPtr
-Ice::createProperties(int& argc, char* argv[])
+Ice::createProperties(int& argc, char* argv[], const PropertiesPtr& defaults)
{
StringSeq args = argsToStringSeq(argc, argv);
- PropertiesPtr properties = createProperties(args);
+ PropertiesPtr properties = createProperties(args, defaults);
stringSeqToArgs(args, argc, argv);
return properties;
}
-static PropertiesPtr defaultProperties;
-class DefaultPropertiesDestroyer
-{
-public:
-
- ~DefaultPropertiesDestroyer()
- {
- defaultProperties = 0;
- }
-};
-static DefaultPropertiesDestroyer defaultPropertiesDestroyer;
-static IceUtil::StaticMutex defaultPropMutex = ICE_STATIC_MUTEX_INITIALIZER;
-
-PropertiesPtr
-Ice::getDefaultProperties()
-{
- IceUtil::StaticMutex::Lock sync(defaultPropMutex);
- if(!defaultProperties)
- {
- defaultProperties = createProperties();
- }
- return defaultProperties;
-}
-
-PropertiesPtr
-Ice::getDefaultProperties(StringSeq& args)
-{
- IceUtil::StaticMutex::Lock sync(defaultPropMutex);
- if(!defaultProperties)
- {
- defaultProperties = createProperties(args);
- }
- return defaultProperties;
-}
-
-PropertiesPtr
-Ice::getDefaultProperties(int& argc, char* argv[])
-{
- StringSeq args = argsToStringSeq(argc, argv);
- PropertiesPtr properties = getDefaultProperties(args);
- stringSeqToArgs(args, argc, argv);
- return properties;
-}
-
-CommunicatorPtr
-Ice::initialize(int& argc, char* argv[], const InitializationData& initData, Int version)
+inline void checkIceVersion(Int version)
{
#ifndef ICE_IGNORE_VERSION
//
@@ -167,23 +122,40 @@ Ice::initialize(int& argc, char* argv[], const InitializationData& initData, Int
throw VersionMismatchException(__FILE__, __LINE__);
}
#endif
+}
- InitializationData tmpData = initData;
- if(tmpData.properties == 0)
- {
- tmpData.properties = getDefaultProperties(argc, argv);
- }
- StringSeq args = argsToStringSeq(argc, argv);
- args = tmpData.properties->parseIceCommandLineOptions(args);
- stringSeqToArgs(args, argc, argv);
- CommunicatorI* communicatorI = new CommunicatorI(tmpData);
+CommunicatorPtr
+Ice::initialize(int& argc, char* argv[], const InitializationData& initializationData, Int version)
+{
+ InitializationData initData = initializationData;
+ initData.properties = createProperties(argc, argv, initData.properties);
+
+ CommunicatorI* communicatorI = new CommunicatorI(initData);
CommunicatorPtr result = communicatorI; // For exception safety.
communicatorI->finishSetup(argc, argv);
return result;
}
CommunicatorPtr
+Ice::initialize(const InitializationData& initData, Int version)
+{
+ //
+ // We can't simply call the other initialize() because this one does NOT read
+ // the config file, while the other one always does.
+ //
+ checkIceVersion(version);
+
+ CommunicatorI* communicatorI = new CommunicatorI(initData);
+ CommunicatorPtr result = communicatorI; // For exception safety.
+ int argc = 0;
+ char* argv[] = { 0 };
+ communicatorI->finishSetup(argc, argv);
+ return result;
+}
+
+
+CommunicatorPtr
Ice::initializeWithProperties(int& argc, char* argv[], const PropertiesPtr& properties, Int version)
{
InitializationData initData;