summaryrefslogtreecommitdiff
path: root/misc/uClibc++/include/uClibc++/ostream_helpers
diff options
context:
space:
mode:
Diffstat (limited to 'misc/uClibc++/include/uClibc++/ostream_helpers')
-rw-r--r--misc/uClibc++/include/uClibc++/ostream_helpers1124
1 files changed, 664 insertions, 460 deletions
diff --git a/misc/uClibc++/include/uClibc++/ostream_helpers b/misc/uClibc++/include/uClibc++/ostream_helpers
index 6c3f9fc69..214ec259d 100644
--- a/misc/uClibc++/include/uClibc++/ostream_helpers
+++ b/misc/uClibc++/include/uClibc++/ostream_helpers
@@ -1,21 +1,21 @@
-/* Copyright (C) 2004 Garrett A. Kajmowicz
-
- This file is part of the uClibc++ Library.
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
+/* Copyright (C) 2004 Garrett A. Kajmowicz
+ *
+ * This file is part of the uClibc++ Library.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
#include <basic_definitions>
#include <cstddef>
@@ -29,459 +29,663 @@
#pragma GCC visibility push(default)
-namespace std{
-
- /* We are making the following template class for serveral reasons. Firstly,
- * we want to keep the main ostream code neat and tidy. Secondly, we want it
- * to be easy to do partial specialization of the ostream code so that it can
- * be expanded and put into the library. This will allow us to make application
- * code smaller at the expense of increased library size. This is a fair
- * trade-off when there are multiple applications being compiled. Also, this
- * feature will be used optionally via configuration options. It will also
- * allow us to keep the code bases in sync, dramatically simplifying the
- * maintenance required. We specialized for char because wchar and others
- * require different scanf functions
- */
-
-
-
- template <class traits, class charT, class dataType> class _UCXXEXPORT __ostream_printout{
- public:
- static void printout(basic_ostream<charT,traits>& stream, const dataType n);
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, signed long int>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const signed long int n)
- {
- char buffer[20];
- const char * c_ld = "%ld";
- const char * c_lo = "%lo";
- const char * c_lX = "%lX";
- const char * c_lx = "%lx";
- const char * c_hashlo = "%#lo";
- const char * c_hashlX = "%#lX";
- const char * c_hashlx = "%#lx";
-
- const char * formatString=0;
-
- if( stream.flags() & ios_base::dec){
- formatString = c_ld;
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- formatString = c_hashlo;
- }else{
- formatString = c_lo;
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- formatString = c_hashlX;
- }else{
- formatString = c_hashlx;
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- formatString = c_lX;
- }else{
- formatString = c_lx;
- }
- }
- }
-
- stream.printout(buffer, snprintf(buffer, 20, formatString, n) );
-
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
-
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, unsigned long int>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const unsigned long int n)
- {
- char buffer[20];
- const char * c_lo = "%lo";
- const char * c_lu = "%lu";
- const char * c_lX = "%lX";
- const char * c_lx = "%lx";
- const char * c_hashlo = "%#lo";
- const char * c_hashlX = "%#lX";
- const char * c_hashlx = "%#lx";
- const char * formatString=0;
-
- if( stream.flags() & ios_base::dec){
- formatString = c_lu;
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- formatString = c_hashlo;
- }else{
- formatString = c_lo;
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- formatString = c_hashlX;
- }else{
- formatString = c_hashlx;
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- formatString = c_lX;
- }else{
- formatString = c_lx;
- }
- }
- }
-
- stream.printout(buffer, snprintf(buffer, 20, formatString, n));
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
+extern "C++"
+{
+namespace std
+{
+ /* We are making the following template class for serveral reasons. Firstly,
+ * we want to keep the main ostream code neat and tidy. Secondly, we want it
+ * to be easy to do partial specialization of the ostream code so that it can
+ * be expanded and put into the library. This will allow us to make application
+ * code smaller at the expense of increased library size. This is a fair
+ * trade-off when there are multiple applications being compiled. Also, this
+ * feature will be used optionally via configuration options. It will also
+ * allow us to keep the code bases in sync, dramatically simplifying the
+ * maintenance required. We specialized for char because wchar and others
+ * require different scanf functions
+ */
+
+ template <class traits, class charT, class dataType> class _UCXXEXPORT __ostream_printout
+ {
+ public:
+ static void printout(basic_ostream<charT,traits>& stream, const dataType n);
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, signed long int>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const signed long int n)
+ {
+ char buffer[20];
+ const char * c_ld = "%ld";
+ const char * c_lo = "%lo";
+ const char * c_lX = "%lX";
+ const char * c_lx = "%lx";
+ const char * c_hashlo = "%#lo";
+ const char * c_hashlX = "%#lX";
+ const char * c_hashlx = "%#lx";
+
+ const char * formatString=0;
+
+ if (stream.flags() & ios_base::dec)
+ {
+ formatString = c_ld;
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ formatString = c_hashlo;
+ }
+ else
+ {
+ formatString = c_lo;
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = c_hashlX;
+ }
+ else
+ {
+ formatString = c_hashlx;
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = c_lX;
+ }
+ else
+ {
+ formatString = c_lx;
+ }
+ }
+ }
+
+ stream.printout(buffer, snprintf(buffer, 20, formatString, n));
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, unsigned long int>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const unsigned long int n)
+ {
+ char buffer[20];
+ const char * c_lo = "%lo";
+ const char * c_lu = "%lu";
+ const char * c_lX = "%lX";
+ const char * c_lx = "%lx";
+ const char * c_hashlo = "%#lo";
+ const char * c_hashlX = "%#lX";
+ const char * c_hashlx = "%#lx";
+ const char * formatString=0;
+
+ if (stream.flags() & ios_base::dec)
+ {
+ formatString = c_lu;
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ formatString = c_hashlo;
+ }
+ else
+ {
+ formatString = c_lo;
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = c_hashlX;
+ }
+ else
+ {
+ formatString = c_hashlx;
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = c_lX;
+ }
+ else
+ {
+ formatString = c_lx;
+ }
+ }
+ }
+
+ stream.printout(buffer, snprintf(buffer, 20, formatString, n));
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
#ifndef __STRICT_ANSI__
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, signed long long int>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const signed long long int n)
- {
- char buffer[28];
- const char * lld = "%lld";
- const char * llo = "%llo";
- const char * llX = "%llX";
- const char * llx = "%llx";
- const char * hashllo = "%#llo";
- const char * hashllX = "%#llX";
- const char * hashllx = "%#llx";
- const char * formatString=0;
-
- if( stream.flags() & ios_base::dec){
- formatString = lld;
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- formatString = hashllo;
- }else{
- formatString = llo;
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- formatString = hashllX;
- }else{
- formatString = hashllx;
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- formatString = llX;
- }else{
- formatString = llx;
- }
- }
- }
-
- stream.printout(buffer, snprintf(buffer, 27, formatString, n) );
-
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, unsigned long long int>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const unsigned long long int n)
- {
- char buffer[28];
- const char * llo = "%llo";
- const char * llu = "%llu";
- const char * llX = "%llX";
- const char * llx = "%llx";
- const char * hashllo = "%#llo";
- const char * hashllX = "%#llX";
- const char * hashllx = "%#llx";
- const char * formatString=0;
-
- if( stream.flags() & ios_base::dec){
- formatString = llu;
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- formatString = hashllo;
- }else{
- formatString = llo;
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- formatString = hashllX;
- }else{
- formatString = hashllx;
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- formatString = llX;
- }else{
- formatString = llx;
- }
- }
- }
-
- stream.printout(buffer, snprintf(buffer, 27, formatString, n) );
-
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
-
-#endif //__STRICT_ANSI__
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, double>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const double f)
- {
- char buffer[32];
- int length;
- if(stream.flags() & ios_base::scientific){
- if(stream.flags() & ios_base::uppercase){
- length = snprintf(buffer, 32, "%*.*E", static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
- }else{
- length = snprintf(buffer, 32, "%*.*e", static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
- }
- } else if(stream.flags() & ios_base::fixed){
- length = snprintf(buffer, 32, "%*.*f",static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
- } else {
- length = snprintf(buffer, 32, "%*.*g",static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
- }
- stream.printout(buffer, length);
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, long double>{
- public:
- static void printout(basic_ostream<char, traits >& stream, const long double f)
- {
- char buffer[32];
- int length;
- if(stream.flags() & ios_base::scientific){
- if(stream.flags() & ios_base::uppercase){
- length = snprintf(buffer, 32, "%*.*LE", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
- }else{
- length = snprintf(buffer, 32, "%*.*Le", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
- }
- } else if(stream.flags() & ios_base::fixed){
- length = snprintf(buffer, 32, "%*.*Lf", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
- } else {
- length = snprintf(buffer, 32, "%*.*Lg", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
- }
- stream.printout(buffer, length);
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
-
- }
- };
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, signed long long int>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const signed long long int n)
+ {
+ char buffer[28];
+ const char * lld = "%lld";
+ const char * llo = "%llo";
+ const char * llX = "%llX";
+ const char * llx = "%llx";
+ const char * hashllo = "%#llo";
+ const char * hashllX = "%#llX";
+ const char * hashllx = "%#llx";
+ const char * formatString=0;
+
+ if (stream.flags() & ios_base::dec)
+ {
+ formatString = lld;
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ formatString = hashllo;
+ }
+ else
+ {
+ formatString = llo;
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = hashllX;
+ }
+ else
+ {
+ formatString = hashllx;
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = llX;
+ }
+ else
+ {
+ formatString = llx;
+ }
+ }
+ }
+
+ stream.printout(buffer, snprintf(buffer, 27, formatString, n));
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, unsigned long long int>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const unsigned long long int n)
+ {
+ char buffer[28];
+ const char * llo = "%llo";
+ const char * llu = "%llu";
+ const char * llX = "%llX";
+ const char * llx = "%llx";
+ const char * hashllo = "%#llo";
+ const char * hashllX = "%#llX";
+ const char * hashllx = "%#llx";
+ const char * formatString=0;
+
+ if (stream.flags() & ios_base::dec)
+ {
+ formatString = llu;
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ formatString = hashllo;
+ }
+ else
+ {
+ formatString = llo;
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = hashllX;
+ }
+ else
+ {
+ formatString = hashllx;
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ formatString = llX;
+ }
+ else
+ {
+ formatString = llx;
+ }
+ }
+ }
+
+ stream.printout(buffer, snprintf(buffer, 27, formatString, n));
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+
+#endif //__STRICT_ANSI__
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, double>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const double f)
+ {
+ char buffer[32];
+ int length;
+
+ if (stream.flags() & ios_base::scientific)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ length = snprintf(buffer, 32, "%*.*E", static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
+ }
+ else
+ {
+ length = snprintf(buffer, 32, "%*.*e", static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
+ }
+ } else if (stream.flags() & ios_base::fixed)
+ {
+ length = snprintf(buffer, 32, "%*.*f",static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
+ }
+ else
+ {
+ length = snprintf(buffer, 32, "%*.*g",static_cast<int>(stream.width()),static_cast<int>(stream.precision()), f);
+ }
+
+ stream.printout(buffer, length);
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, char, long double>
+ {
+ public:
+ static void printout(basic_ostream<char, traits >& stream, const long double f)
+ {
+ char buffer[32];
+ int length;
+ if (stream.flags() & ios_base::scientific)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ length = snprintf(buffer, 32, "%*.*LE", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
+ }
+ else
+ {
+ length = snprintf(buffer, 32, "%*.*Le", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
+ }
+ }
+ else if (stream.flags() & ios_base::fixed)
+ {
+ length = snprintf(buffer, 32, "%*.*Lf", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
+ }
+ else
+ {
+ length = snprintf(buffer, 32, "%*.*Lg", static_cast<int>(stream.width()), static_cast<int>(stream.precision()), f);
+ }
+
+ stream.printout(buffer, length);
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
#ifdef __UCLIBCXX_HAS_WCHAR__
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, signed long int>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const signed long int n)
- {
- wchar_t buffer[20];
- if( stream.flags() & ios_base::dec){
- stream.printout(buffer, swprintf(buffer, 20, L"%ld", n));
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) );
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) );
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) );
- }
- }
- }
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, unsigned long int>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const unsigned long int n)
- {
- wchar_t buffer[20];
- if( stream.flags() & ios_base::dec){
- stream.printout(buffer, swprintf(buffer, 20, L"%lu", n));
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%lo", n) );
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n) );
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 20, L"%lX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 20, L"%lx", n) );
- }
- }
- }
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, signed long int>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const signed long int n)
+ {
+ wchar_t buffer[20];
+ if (stream.flags() & ios_base::dec)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%ld", n));
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n));
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n));
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n));
+ }
+ }
+ }
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, unsigned long int>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const unsigned long int n)
+ {
+ wchar_t buffer[20];
+
+ if (stream.flags() & ios_base::dec)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lu", n));
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lo", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lo", n));
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%#lx", n));
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 20, L"%lx", n));
+ }
+ }
+ }
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
#ifndef __STRICT_ANSI__
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, signed long long int>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const signed long long int n)
- {
- wchar_t buffer[28];
- if( stream.flags() & ios_base::dec){
- stream.printout(buffer, swprintf(buffer, 27, L"%lld", n));
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) );
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) );
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) );
- }
- }
- }
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, unsigned long long int>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const unsigned long long int n)
- {
- wchar_t buffer[28];
- if( stream.flags() & ios_base::dec){
- stream.printout(buffer, swprintf(buffer, 27, L"%llu", n));
- }else if( stream.flags() & ios_base::oct){
- if( stream.flags() & ios_base::showbase){
- stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%llo", n) );
- }
- }else if (stream.flags() & ios_base::hex){
- if(stream.flags() & ios_base::showbase){
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n) );
- }
- }else{
- if(stream.flags() & ios_base::uppercase){
- stream.printout(buffer, swprintf(buffer, 27, L"%llX", n) );
- }else{
- stream.printout(buffer, swprintf(buffer, 27, L"%llx", n) );
- }
- }
- }
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
-
-#endif //__STRICT_ANSI__
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, double>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const double f)
- {
- wchar_t buffer[32];
- wchar_t format_string[32];
- if(stream.flags() & ios_base::scientific){
- if(stream.flags() & ios_base::uppercase){
- swprintf(format_string, 32, L"%%%u.%uE", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }else{
- swprintf(format_string, 32, L"%%%u.%ue", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }
- } else if(stream.flags() & ios_base::fixed){
- swprintf(format_string, 32, L"%%%u.%uf", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- } else {
- swprintf(format_string, 32, L"%%%u.%ug", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }
- stream.printout(buffer, swprintf(buffer, 32, format_string, f) );
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
-
- template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, long double>{
- public:
- static void printout(basic_ostream<wchar_t, traits >& stream, const long double f)
- {
- wchar_t buffer[32];
- wchar_t format_string[32];
- if(stream.flags() & ios_base::scientific){
- if(stream.flags() & ios_base::uppercase){
- swprintf(format_string, 32, L"%%%u.%uLE", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }else{
- swprintf(format_string, 32, L"%%%u.%uLe", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }
- } else if(stream.flags() & ios_base::fixed){
- swprintf(format_string, 32, L"%%%u.%uLf", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- } else {
- swprintf(format_string, 32, L"%%%u.%uLg", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
- }
- stream.printout(buffer, swprintf(buffer, 32, format_string, f) );
- if(stream.flags() & ios_base::unitbuf){
- stream.flush();
- }
- }
- };
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, signed long long int>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const signed long long int n)
+ {
+ wchar_t buffer[28];
+ if (stream.flags() & ios_base::dec)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%lld", n));
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n));
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n));
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n));
+ }
+ }
+ }
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, unsigned long long int>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const unsigned long long int n)
+ {
+ wchar_t buffer[28];
+
+ if (stream.flags() & ios_base::dec)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llu", n));
+ }
+ else if (stream.flags() & ios_base::oct)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llo", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llo", n));
+ }
+ }
+ else if (stream.flags() & ios_base::hex)
+ {
+ if (stream.flags() & ios_base::showbase)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%#llx", n));
+ }
+ }
+ else
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llX", n));
+ }
+ else
+ {
+ stream.printout(buffer, swprintf(buffer, 27, L"%llx", n));
+ }
+ }
+ }
+
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+
+#endif //__STRICT_ANSI__
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, double>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const double f)
+ {
+ wchar_t buffer[32];
+ wchar_t format_string[32];
+
+ if (stream.flags() & ios_base::scientific)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ swprintf(format_string, 32, L"%%%u.%uE", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ else
+ {
+ swprintf(format_string, 32, L"%%%u.%ue", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ }
+ else if (stream.flags() & ios_base::fixed)
+ {
+ swprintf(format_string, 32, L"%%%u.%uf", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ else
+ {
+ swprintf(format_string, 32, L"%%%u.%ug", static_cast<int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+
+ stream.printout(buffer, swprintf(buffer, 32, format_string, f));
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
+
+ template <class traits> class _UCXXEXPORT __ostream_printout<traits, wchar_t, long double>
+ {
+ public:
+ static void printout(basic_ostream<wchar_t, traits >& stream, const long double f)
+ {
+ wchar_t buffer[32];
+ wchar_t format_string[32];
+
+ if (stream.flags() & ios_base::scientific)
+ {
+ if (stream.flags() & ios_base::uppercase)
+ {
+ swprintf(format_string, 32, L"%%%u.%uLE", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ else
+ {
+ swprintf(format_string, 32, L"%%%u.%uLe", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ }
+ else if (stream.flags() & ios_base::fixed)
+ {
+ swprintf(format_string, 32, L"%%%u.%uLf", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+ else
+ {
+ swprintf(format_string, 32, L"%%%u.%uLg", static_cast<unsigned int>(stream.width()), static_cast<unsigned int>(stream.precision()));
+ }
+
+ stream.printout(buffer, swprintf(buffer, 32, format_string, f));
+ if (stream.flags() & ios_base::unitbuf)
+ {
+ stream.flush();
+ }
+ }
+ };
#endif //__UCLIBCXX_HAS_WCHAR__
-}
+} // namespace
+} // extern "C++"
#pragma GCC visibility pop