diff options
Diffstat (limited to 'cpp/demo/Ice/nrvo')
-rw-r--r-- | cpp/demo/Ice/nrvo/.depend | 1 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/Client.cpp | 123 | ||||
-rwxr-xr-x | cpp/demo/Ice/nrvo/Ice.nrvo.client.dsp | 165 | ||||
-rwxr-xr-x | cpp/demo/Ice/nrvo/Ice.nrvo.server.dsp | 169 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/Makefile | 3 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/Makefile.mak | 3 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/MyStringSeq.cpp | 34 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/MyStringSeq.h | 31 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/Nrvo.ice | 4 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/NrvoI.cpp | 32 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/NrvoI.h | 2 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/README | 67 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/Server.cpp | 3 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/config.client | 9 | ||||
-rw-r--r-- | cpp/demo/Ice/nrvo/config.server | 4 |
15 files changed, 520 insertions, 130 deletions
diff --git a/cpp/demo/Ice/nrvo/.depend b/cpp/demo/Ice/nrvo/.depend index 7bda9bb610a..9e5bee5a07c 100644 --- a/cpp/demo/Ice/nrvo/.depend +++ b/cpp/demo/Ice/nrvo/.depend @@ -1,4 +1,5 @@ Nrvo$(OBJEXT): Nrvo.cpp ./Nrvo.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/Ice/LoggerF.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h ./MyStringSeq.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/ObjectFactory.h $(includedir)/IceUtil/Iterator.h $(includedir)/IceUtil/ScopedArray.h +MyStringSeq$(OBJEXT): MyStringSeq.cpp ./MyStringSeq.h $(includedir)/IceUtil/Config.h Client$(OBJEXT): Client.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h ./Nrvo.h ./MyStringSeq.h NrvoI$(OBJEXT): NrvoI.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h ./NrvoI.h ./Nrvo.h ./MyStringSeq.h Server$(OBJEXT): Server.cpp $(includedir)/Ice/Ice.h $(includedir)/Ice/Initialize.h $(includedir)/Ice/CommunicatorF.h $(includedir)/Ice/LocalObjectF.h $(includedir)/IceUtil/Shared.h $(includedir)/IceUtil/Config.h $(includedir)/Ice/Handle.h $(includedir)/IceUtil/Handle.h $(includedir)/IceUtil/Exception.h $(includedir)/Ice/Config.h $(includedir)/Ice/ProxyHandle.h $(includedir)/Ice/ProxyF.h $(includedir)/Ice/ObjectF.h $(includedir)/Ice/GCCountMap.h $(includedir)/Ice/GCShared.h $(includedir)/Ice/Exception.h $(includedir)/Ice/LocalObject.h $(includedir)/Ice/UndefSysMacros.h $(includedir)/Ice/PropertiesF.h $(includedir)/Ice/Proxy.h $(includedir)/IceUtil/Mutex.h $(includedir)/IceUtil/Lock.h $(includedir)/IceUtil/ThreadException.h $(includedir)/IceUtil/Time.h $(includedir)/Ice/ProxyFactoryF.h $(includedir)/Ice/ConnectionIF.h $(includedir)/Ice/RequestHandlerF.h $(includedir)/Ice/EndpointIF.h $(includedir)/Ice/Endpoint.h $(includedir)/Ice/ObjectAdapterF.h $(includedir)/Ice/ReferenceF.h $(includedir)/Ice/OutgoingAsyncF.h $(includedir)/Ice/Current.h $(includedir)/Ice/ConnectionF.h $(includedir)/Ice/Identity.h $(includedir)/Ice/StreamF.h $(includedir)/Ice/Object.h $(includedir)/Ice/IncomingAsyncF.h $(includedir)/Ice/InstanceF.h $(includedir)/Ice/LoggerF.h $(includedir)/Ice/StatsF.h $(includedir)/Ice/StringConverter.h $(includedir)/Ice/Plugin.h $(includedir)/IceUtil/Unicode.h $(includedir)/Ice/BuiltinSequences.h $(includedir)/Ice/LocalException.h $(includedir)/Ice/Properties.h $(includedir)/Ice/Outgoing.h $(includedir)/IceUtil/Monitor.h $(includedir)/IceUtil/Cond.h $(includedir)/Ice/BasicStream.h $(includedir)/Ice/ObjectFactoryF.h $(includedir)/Ice/Buffer.h $(includedir)/Ice/Protocol.h $(includedir)/Ice/OutgoingAsync.h $(includedir)/IceUtil/Timer.h $(includedir)/IceUtil/Thread.h $(includedir)/Ice/Incoming.h $(includedir)/Ice/ServantLocatorF.h $(includedir)/Ice/ServantManagerF.h $(includedir)/Ice/Direct.h $(includedir)/Ice/Logger.h $(includedir)/Ice/LoggerUtil.h $(includedir)/Ice/Stats.h $(includedir)/Ice/Communicator.h $(includedir)/Ice/RouterF.h $(includedir)/Ice/LocatorF.h $(includedir)/Ice/PluginF.h $(includedir)/Ice/ImplicitContextF.h $(includedir)/Ice/ObjectFactory.h $(includedir)/Ice/ObjectAdapter.h $(includedir)/Ice/FacetMap.h $(includedir)/Ice/ServantLocator.h $(includedir)/Ice/IncomingAsync.h $(includedir)/Ice/Process.h $(includedir)/Ice/Application.h $(includedir)/Ice/Connection.h $(includedir)/Ice/Functional.h $(includedir)/IceUtil/Functional.h $(includedir)/Ice/Stream.h $(includedir)/Ice/ImplicitContext.h $(includedir)/Ice/Locator.h $(includedir)/Ice/UserExceptionFactory.h $(includedir)/Ice/FactoryTableInit.h $(includedir)/Ice/FactoryTable.h $(includedir)/IceUtil/StaticMutex.h $(includedir)/Ice/UserExceptionFactoryF.h $(includedir)/Ice/ProcessF.h $(includedir)/Ice/Router.h $(includedir)/Ice/DispatchInterceptor.h $(includedir)/Ice/IconvStringConverter.h ./NrvoI.h ./Nrvo.h ./MyStringSeq.h diff --git a/cpp/demo/Ice/nrvo/Client.cpp b/cpp/demo/Ice/nrvo/Client.cpp index 449fa6fc468..2ff70a697a3 100644 --- a/cpp/demo/Ice/nrvo/Client.cpp +++ b/cpp/demo/Ice/nrvo/Client.cpp @@ -34,7 +34,12 @@ main(int argc, char* argv[]) return app.main(argc, argv, "config.client"); } -NrvoClient::NrvoClient() +NrvoClient::NrvoClient() : + // + // Since this is an interactive demo we don't want any signal + // handling. + // + Ice::Application(Ice::NoSignalHandling) { } @@ -56,7 +61,6 @@ NrvoClient::run(int argc, char* argv[]) menu(); - char currentOperation = '1'; char c; do { @@ -65,54 +69,59 @@ NrvoClient::run(int argc, char* argv[]) cout << "==> "; cin >> c; - if(c == '1' || c == '2' || c == '3' || c == 's' || c == '?' || c == 'x') - { - currentOperation = c; - switch(c) - { - case '1': - { - cout << "calling op1" << endl; - MyStringSeq seq = nrvo->op1(); - break; - } - - case '2': - { - cout << "calling op2" << endl; - MyStringSeq seq = nrvo->op2(); - break; - } - - case '3': - { - cout << "calling op3" << endl; - MyStringSeq seq = nrvo->op3(10); - break; - } - - case 's': - { - nrvo->shutdown(); - } - - case '?': - { - menu(); - break; - } - - case 'x': - { - break; - } - } - } - else - { - cout << "unknown command `" << c << "'" << endl; - menu(); - } + switch(c) + { + case '1': + { + cout << "calling op1" << endl; + MyStringSeq seq = nrvo->op1(); + break; + } + + case '2': + { + cout << "calling op2" << endl; + MyStringSeq seq = nrvo->op2(); + break; + } + + case '3': + { + cout << "calling op3(10)" << endl; + MyStringSeq seq = nrvo->op3(10); + break; + } + + case '4': + { + cout << "calling op3(0)" << endl; + MyStringSeq seq = nrvo->op3(0); + break; + } + + case 's': + { + nrvo->shutdown(); + break; + } + + case '?': + { + menu(); + break; + } + + case 'x': + { + break; + } + default: + { + cout << "unknown command `" << c << "'" << endl; + menu(); + break; + } + } } catch(const Ice::Exception& ex) { @@ -124,7 +133,6 @@ NrvoClient::run(int argc, char* argv[]) return EXIT_SUCCESS; } - void NrvoClient::menu() { @@ -132,10 +140,11 @@ NrvoClient::menu() "usage:\n" "\n" "Operation to call:\n" - "1: return a string sequence.\n" - "2: return a string sequence that is a data member of the servant.\n" - "3: return a string sequence from an operation with multiple return path.\n" - "s: shutdown server.\n" - "x: exit.\n" - "?: show this menu.\n"; + "1: return a string sequence\n" + "2: return a string sequence that is a data member of the servant\n" + "3: return a string sequence from an operation with multiple return paths\n" + "4: return a string sequence from an operation with multiple return paths, using RVO\n" + "s: shutdown server\n" + "x: exit\n" + "?: show this menu\n"; } diff --git a/cpp/demo/Ice/nrvo/Ice.nrvo.client.dsp b/cpp/demo/Ice/nrvo/Ice.nrvo.client.dsp new file mode 100755 index 00000000000..438db2d9d81 --- /dev/null +++ b/cpp/demo/Ice/nrvo/Ice.nrvo.client.dsp @@ -0,0 +1,165 @@ +# Microsoft Developer Studio Project File - Name="Ice.nrvo.client.exe" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Ice.nrvo.client.exe - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Ice.nrvo.client.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Ice.nrvo.client.mak" CFG="Ice.nrvo.client.exe - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Ice.nrvo.client.exe - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Ice.nrvo.client.exe - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Ice.nrvo.client.exe - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /WX /GR /GX /O2 /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "NDEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Ice.lib IceUtil.lib setargv.obj /nologo /subsystem:console /pdb:none /machine:I386 /out:"client.exe" /libpath:"../../../lib" /FIXED:no /IGNORE:4089
+# SUBTRACT LINK32 /debug /nodefaultlib
+
+!ELSEIF "$(CFG)" == "Ice.nrvo.client.exe - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /WX /Gm /GR /GX /Zi /Od /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "_DEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /GZ /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 Iced.lib IceUtild.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"client.exe" /pdbtype:sept /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "Ice.nrvo.client.exe - Win32 Release"
+# Name "Ice.nrvo.client.exe - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\MyStringSeq.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Nrvo.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\MyStringSeq.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Nrvo.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\Nrvo.ice
+
+!IF "$(CFG)" == "Ice.nrvo.client.exe - Win32 Release"
+
+USERDEP__NRVO_="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\slice.lib"
+# Begin Custom Build
+InputPath=.\Nrvo.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Nrvo.ice
+
+"Nrvo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Nrvo.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Ice.nrvo.client.exe - Win32 Debug"
+
+USERDEP__NRVO_="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\sliced.lib"
+# Begin Custom Build
+InputPath=.\Nrvo.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Nrvo.ice
+
+"Nrvo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Nrvo.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Target
+# End Project
diff --git a/cpp/demo/Ice/nrvo/Ice.nrvo.server.dsp b/cpp/demo/Ice/nrvo/Ice.nrvo.server.dsp new file mode 100755 index 00000000000..7a8be43bde1 --- /dev/null +++ b/cpp/demo/Ice/nrvo/Ice.nrvo.server.dsp @@ -0,0 +1,169 @@ +# Microsoft Developer Studio Project File - Name="Ice.nrvo.server.exe" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=Ice.nrvo.server.exe - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "Ice.nrvo.server.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "Ice.nrvo.server.mak" CFG="Ice.nrvo.server.exe - Win32 Debug"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "Ice.nrvo.server.exe - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "Ice.nrvo.server.exe - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "Ice.nrvo.server.exe - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /WX /GR /GX /O2 /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "NDEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 Ice.lib IceUtil.lib setargv.obj /nologo /subsystem:console /pdb:none /machine:I386 /out:"server.exe" /libpath:"../../../lib" /FIXED:no /IGNORE:4089
+# SUBTRACT LINK32 /debug /nodefaultlib
+
+!ELSEIF "$(CFG)" == "Ice.nrvo.server.exe - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
+# ADD CPP /nologo /MDd /W3 /WX /Gm /GR /GX /Zi /Od /I "." /I "../../../include" /I "../../../include/stlport" /D "_CONSOLE" /D "_DEBUG" /D "WIN32_LEAN_AND_MEAN" /FD /GZ /c
+# SUBTRACT CPP /Fr /YX
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 Iced.lib IceUtild.lib setargv.obj /nologo /subsystem:console /debug /machine:I386 /out:"server.exe" /pdbtype:sept /libpath:"../../../lib" /FIXED:no
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "Ice.nrvo.server.exe - Win32 Release"
+# Name "Ice.nrvo.server.exe - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\MyStringSeq.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Nrvo.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\NrvoI.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Server.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\Nrvo.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\NrvoI.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\Nrvo.ice
+
+!IF "$(CFG)" == "Ice.nrvo.server.exe - Win32 Release"
+
+USERDEP__NRVO_="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\slice.lib"
+# Begin Custom Build
+InputPath=.\Nrvo.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Nrvo.ice
+
+"Nrvo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Nrvo.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ELSEIF "$(CFG)" == "Ice.nrvo.server.exe - Win32 Debug"
+
+USERDEP__NRVO_="..\..\..\bin\slice2cpp.exe" "..\..\..\lib\sliced.lib"
+# Begin Custom Build
+InputPath=.\Nrvo.ice
+
+BuildCmds= \
+ ..\..\..\bin\slice2cpp.exe Nrvo.ice
+
+"Nrvo.h" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+
+"Nrvo.cpp" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)"
+ $(BuildCmds)
+# End Custom Build
+
+!ENDIF
+
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\README
+# End Source File
+# End Target
+# End Project
diff --git a/cpp/demo/Ice/nrvo/Makefile b/cpp/demo/Ice/nrvo/Makefile index d5159ce9b82..9afd1a5ee45 100644 --- a/cpp/demo/Ice/nrvo/Makefile +++ b/cpp/demo/Ice/nrvo/Makefile @@ -14,7 +14,8 @@ SERVER = server TARGETS = $(CLIENT) $(SERVER) -OBJS = Nrvo.o +OBJS = Nrvo.o \ + MyStringSeq.o COBJS = Client.o diff --git a/cpp/demo/Ice/nrvo/Makefile.mak b/cpp/demo/Ice/nrvo/Makefile.mak index 48784e0328d..70ff1c4343a 100644 --- a/cpp/demo/Ice/nrvo/Makefile.mak +++ b/cpp/demo/Ice/nrvo/Makefile.mak @@ -14,7 +14,8 @@ SERVER = server.exe TARGETS = $(CLIENT) $(SERVER)
-OBJS = Nrvo.obj
+OBJS = Nrvo.obj \
+ MyStringSeq.obj
COBJS = Client.obj
diff --git a/cpp/demo/Ice/nrvo/MyStringSeq.cpp b/cpp/demo/Ice/nrvo/MyStringSeq.cpp new file mode 100644 index 00000000000..240f42f6fb6 --- /dev/null +++ b/cpp/demo/Ice/nrvo/MyStringSeq.cpp @@ -0,0 +1,34 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + +#include <MyStringSeq.h> + +#include <iostream> + +using namespace std; + +MyStringSeq::MyStringSeq() +{ +} + +MyStringSeq::MyStringSeq(size_t n) : + vector<string>(n) +{ +} + +MyStringSeq::MyStringSeq(size_t n, const string& str) : + vector<string>(n, str) +{ +} + +MyStringSeq::MyStringSeq(const MyStringSeq& seq) : + vector<string>(seq) +{ + cout << "MyStringSeq copy ctor" << endl; +} diff --git a/cpp/demo/Ice/nrvo/MyStringSeq.h b/cpp/demo/Ice/nrvo/MyStringSeq.h index e5adfc4b45e..54e057a7836 100644 --- a/cpp/demo/Ice/nrvo/MyStringSeq.h +++ b/cpp/demo/Ice/nrvo/MyStringSeq.h @@ -1,32 +1,31 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved. +// +// This copy of Ice is licensed to you under the terms described in the +// ICE_LICENSE file included in this distribution. +// +// ********************************************************************** + #ifndef MY_STRING_SEQ #define MY_STRING_SEQ +#include <IceUtil/Config.h> #include <vector> #include <string> -#include <iostream> class MyStringSeq : public std::vector<std::string> { public: - MyStringSeq() - {} + MyStringSeq(); + + MyStringSeq(size_t); - MyStringSeq(size_t n) : - std::vector<std::string>(n) - { - } + MyStringSeq(size_t, const std::string&); - MyStringSeq(size_t n, const std::string& str) : - std::vector<std::string>(n, str) - { - } + MyStringSeq(const MyStringSeq&); - MyStringSeq(const MyStringSeq& seq) : - std::vector<std::string>(seq) - { - std::cout << "MyStringSeq copy ctor" << std::endl; - } }; #endif diff --git a/cpp/demo/Ice/nrvo/Nrvo.ice b/cpp/demo/Ice/nrvo/Nrvo.ice index 4e52b8f5e6f..db293f2ee5a 100644 --- a/cpp/demo/Ice/nrvo/Nrvo.ice +++ b/cpp/demo/Ice/nrvo/Nrvo.ice @@ -10,12 +10,12 @@ #ifndef NRVO_ICE #define NRVO_ICE +[["cpp:include:MyStringSeq.h"]] + module Demo { -[["cpp:include:MyStringSeq.h"]] ["cpp:type:MyStringSeq"] sequence<string> StringSeq; -const int StringSeqSize = 50000; interface Nrvo { diff --git a/cpp/demo/Ice/nrvo/NrvoI.cpp b/cpp/demo/Ice/nrvo/NrvoI.cpp index dea09e60bed..656a3e400f2 100644 --- a/cpp/demo/Ice/nrvo/NrvoI.cpp +++ b/cpp/demo/Ice/nrvo/NrvoI.cpp @@ -8,24 +8,34 @@ // ********************************************************************** #include <Ice/Ice.h> -#include <iostream> #include <NrvoI.h> using namespace std; NrvoI::NrvoI() : - _stringSeq(Demo::StringSeqSize, "hello") + _stringSeq(10, "hello") { } +// +// NRVO (Named Return Value Optimization): +// the return value is a stack-allocated variable, +// and there is only a single return path. +// Demo::StringSeq NrvoI::op1(const Ice::Current&) { cout << "running op1" << endl; - MyStringSeq seq = MyStringSeq(Demo::StringSeqSize, "hello"); + // + // Not "return MyStringSeq(10, "hello")", since this lacks a name. + // + MyStringSeq seq = MyStringSeq(10, "hello"); return seq; } +// +// No optimization: the return value is a data member. +// Demo::StringSeq NrvoI::op2(const Ice::Current&) { @@ -33,20 +43,30 @@ NrvoI::op2(const Ice::Current&) return _stringSeq; } + +// +// Operation with multiple return paths. +// Demo::StringSeq NrvoI::op3(int size, const Ice::Current&) { cout << "running op3" << endl; - MyStringSeq seq; if(size < 10) { + // + // RVO (Return Value Optimization): return value + // is constructed in place. + // return MyStringSeq(size, "hello"); } - seq = MyStringSeq(10, "hello"); + + // + // No optimization: NRVO requires a single return path. + // + MyStringSeq seq = MyStringSeq(10, "hello"); return seq; } - void NrvoI::shutdown(const Ice::Current& c) { diff --git a/cpp/demo/Ice/nrvo/NrvoI.h b/cpp/demo/Ice/nrvo/NrvoI.h index d92931f193d..0328ae6b98a 100644 --- a/cpp/demo/Ice/nrvo/NrvoI.h +++ b/cpp/demo/Ice/nrvo/NrvoI.h @@ -20,7 +20,7 @@ public: NrvoI(); virtual Demo::StringSeq op1(const Ice::Current&); virtual Demo::StringSeq op2(const Ice::Current&); - virtual Demo::StringSeq op3(int size, const Ice::Current&); + virtual Demo::StringSeq op3(int, const Ice::Current&); virtual void shutdown(const Ice::Current&); private: diff --git a/cpp/demo/Ice/nrvo/README b/cpp/demo/Ice/nrvo/README index 7cfbfe674a6..b2fa42af41e 100644 --- a/cpp/demo/Ice/nrvo/README +++ b/cpp/demo/Ice/nrvo/README @@ -1,17 +1,17 @@ +A simple demo that shows how Ice takes advantage of NRVO (Named +Return Value Optimization), which is implemented by modern C++ +compilers. -A simple demo that show how Ice take advantage of NRVO -(Named Return Value Optimization) include in modern c++ compilers. +GCC and Microsoft Visual Studio compilers support this optimization. -GCC and Visual Studio compilers support this optimization +You can read more about Visual Studio NRVO at: - You could read more about Visual Studio NRVO at: + * http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx - * http://msdn.microsoft.com/en-us/library/ms364057(VS.80).aspx +For GCC, NRVO was first introduced in version 3.1. See the release +changes at: - For GCC NRVO was first introduced in gcc-3.1 see the release - changes at: - - * http://www.gnu.org/software/gcc/gcc-3.1/changes.html + * http://www.gnu.org/software/gcc/gcc-3.1/changes.html To run the demo, first start the server: @@ -21,29 +21,26 @@ In a separate window, start the client: $ client -When you start the client it show you a menu with different -operations, you can invoke each operation pressing the corresponding -key. - -All this operations return a string sequence mapped to a custom class -MyStringSeq, when a copy is made the message "MyStringSeq copy ctor" -is wrote to the console, this permit you see what copies of the -returned data are made by Ice run time. - -To make sure the optimizations are applied you should compile the demo -with optimizations enabled. - -If you call an operation the client and server should print a message -"calling <operation name>" and bellow that message you will see as -many "MyStringSeq copy ctor" messages as copies are made. - -In the server side we show one case when NRVO works, that is a -function that has a single return path implemented and is -implementation is NrvoI::op1, and two case where NRVO don't work, a -function that return a data member of the servant the implementation -is in NrvoI::op2 and a function with multiple returns path -implemented in NrvoI::op3. - -So if you press option 1 you will see that NRVO is apply in both -client and server sides, and if you call 2 or 3 the optimization only -apply to client side. +The client presents a menu of options that you can invoke by pressing +the corresponding key. All of these operations return a string +sequence mapped to the custom class MyStringSeq. This class prints +the message "MyStringSeq copy ctor" each time it is copied so that you +can see when copies of the returned data are made by the Ice run time. + +With Visual C++, you must compile with optimization for NRVO to be +enabled. GCC applies NRVO whether the code is optimized or not. + +In the server, we show one case when NRVO works: a function that has a +single return path implemented in NrvoI::op1. There are also two cases +where NRVO doesn't work: a function that returns a data member of +the servant (NrvoI::op2) and a function with multiple return paths +(NrvoI::op3). + +Invoking op1 demonstrates that NRVO is applied in both the client and +the server, whereas for op2 and op3 NRVO is only applied in the +client. + +The client can also invoke op3 such that RVO (Return Value Optimization) +is applied for a return statement with in-place construction. (See +http://www.efnetcpp.org/wiki/Return_value_optimization for information +on RVO.) diff --git a/cpp/demo/Ice/nrvo/Server.cpp b/cpp/demo/Ice/nrvo/Server.cpp index 4ab12e580e4..104960f5a1d 100644 --- a/cpp/demo/Ice/nrvo/Server.cpp +++ b/cpp/demo/Ice/nrvo/Server.cpp @@ -36,8 +36,7 @@ NrvotServer::run(int argc, char* argv[]) } Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapter("Nrvo"); - Demo::NrvoPtr servant = new NrvoI(); - adapter->add(servant, communicator()->stringToIdentity("nrvo")); + adapter->add(new NrvoI(), communicator()->stringToIdentity("nrvo")); adapter->activate(); communicator()->waitForShutdown(); return EXIT_SUCCESS; diff --git a/cpp/demo/Ice/nrvo/config.client b/cpp/demo/Ice/nrvo/config.client index c582c4dd677..7b00352d558 100644 --- a/cpp/demo/Ice/nrvo/config.client +++ b/cpp/demo/Ice/nrvo/config.client @@ -1,13 +1,8 @@ # # The client reads this property to create the reference to the -# "Throughput" object in the server. +# "Nrvo" object in the server. # -Nrvo.Proxy=nrvo:default -p 10000 -h 127.0.0.1 - -# -# Disable client-side ACM. -# -Ice.ACM.Client=0 +Nrvo.Proxy=nrvo:default -p 10000 # # SSL Configuration diff --git a/cpp/demo/Ice/nrvo/config.server b/cpp/demo/Ice/nrvo/config.server index 2a90e37a37c..a98f09fe187 100644 --- a/cpp/demo/Ice/nrvo/config.server +++ b/cpp/demo/Ice/nrvo/config.server @@ -1,9 +1,9 @@ # # The server creates one single object adapter with the name -# "Throughput". The following line sets the endpoints for this +# "Nrvo". The following line sets the endpoints for this # adapter. # -Nrvo.Endpoints=default -p 10000 -h 127.0.0.1 +Nrvo.Endpoints=default -p 10000 # # Warn about connection exceptions |