diff options
author | Jose <jose@zeroc.com> | 2017-01-09 17:01:31 +0100 |
---|---|---|
committer | Jose <jose@zeroc.com> | 2017-01-09 17:01:31 +0100 |
commit | d4ed7973f1824478477be29989fc125b04207494 (patch) | |
tree | ec488f46a0ee15f987a0a24c87d1fe0a999cc168 /cpp/include/IceUtil/ConsoleUtil.h | |
parent | IceSSL C#/Java test fixes to sync with C++ changes (diff) | |
download | ice-d4ed7973f1824478477be29989fc125b04207494.tar.bz2 ice-d4ed7973f1824478477be29989fc125b04207494.tar.xz ice-d4ed7973f1824478477be29989fc125b04207494.zip |
Fixed (ICE-6694) - Unicode output in command line tools
Diffstat (limited to 'cpp/include/IceUtil/ConsoleUtil.h')
-rw-r--r-- | cpp/include/IceUtil/ConsoleUtil.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/cpp/include/IceUtil/ConsoleUtil.h b/cpp/include/IceUtil/ConsoleUtil.h new file mode 100644 index 00000000000..876cb61cf69 --- /dev/null +++ b/cpp/include/IceUtil/ConsoleUtil.h @@ -0,0 +1,98 @@ +// ********************************************************************** +// +// Copyright (c) 2003-2016 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 ICE_UTIL_CONSOLE_UTIL_H +#define ICE_UTIL_CONSOLE_UTIL_H + +#include <IceUtil/Config.h> +#include <IceUtil/StringConverter.h> +#include <iostream> + +namespace IceUtilInternal +{ + +#if defined(_WIN32) && !defined(ICE_OS_UWP) + +class ConsoleUtil; +ICE_DEFINE_PTR(ConsoleUtilPtr, ConsoleUtil); + +class ICE_API ConsoleUtil +# ifndef ICE_CPP11_MAPPING + : public IceUtil::Shared +# endif +{ +public: + + ConsoleUtil(); + void output(const std::string&) const; + void error(const std::string&) const; + +private: + + std::string toConsoleEncoding(const std::string&) const; + IceUtil::StringConverterPtr _converter; + IceUtil::StringConverterPtr _consoleConverter; + static ConsoleUtilPtr _instance; +}; + +const ICE_API ConsoleUtilPtr& getConsoleUtil(); + +class ICE_API ConsoleOut +{ +public: + + ConsoleOut& operator<<(ConsoleOut& (*pf)(ConsoleOut&)); +}; + +class ICE_API ConsoleErr +{ +public: + + ConsoleErr& operator<<(ConsoleErr& (*pf)(ConsoleErr&)); +}; + +template<typename T> +ConsoleOut& +operator<<(ConsoleOut& out, const T& val) +{ + std::ostringstream s; + s << val; + getConsoleUtil()->output(s.str()); + return out; +} + +ICE_API ConsoleOut& endl(ConsoleOut&); +ICE_API ConsoleOut& flush(ConsoleOut&); + +template<typename T> +ConsoleErr& +operator<<(ConsoleErr& err, const T& val) +{ + std::ostringstream s; + s << val; + getConsoleUtil()->error(s.str()); + return err; +} + +ICE_API ConsoleErr& endl(ConsoleErr&); +ICE_API ConsoleErr& flush(ConsoleErr&); + +extern ICE_API ConsoleOut consoleOut; +extern ICE_API ConsoleErr consoleErr; + +#else + +extern ICE_API std::ostream& consoleOut; +extern ICE_API std::ostream& consoleErr; + +#endif + +} + +#endif |