diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-05 18:05:22 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-06-05 18:05:22 +0300 |
commit | 68d9d512e933a1d40670add50f205e5266bc5507 (patch) | |
tree | 24f483a40449b28b4414360fbdd03646315ac1ec /storage/innobase/include/ut0ut.h | |
parent | 6404645980db51fdc1e5dae2ac94eca57804284b (diff) | |
parent | 286e52e948eee9e5f908c5944467149df35d25e7 (diff) | |
download | mariadb-git-68d9d512e933a1d40670add50f205e5266bc5507.tar.gz |
Merge 10.3 into 10.4
Diffstat (limited to 'storage/innobase/include/ut0ut.h')
-rw-r--r-- | storage/innobase/include/ut0ut.h | 77 |
1 files changed, 35 insertions, 42 deletions
diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h index 6b99bae6b7b..430b99d7667 100644 --- a/storage/innobase/include/ut0ut.h +++ b/storage/innobase/include/ut0ut.h @@ -1,7 +1,7 @@ /***************************************************************************** Copyright (c) 1994, 2016, Oracle and/or its affiliates. All Rights Reserved. -Copyright (c) 2019, MariaDB Corporation. +Copyright (c) 2019, 2020, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software @@ -336,48 +336,41 @@ operator<<( It contains a std::ostringstream object. The main purpose of this class is to forward operator<< to the underlying std::ostringstream object. Do not use this class directly, instead use one of the derived classes. */ -class logger { -public: - template<typename T> - ATTRIBUTE_COLD - logger& operator<<(const T& rhs) - { - m_oss << rhs; - return(*this); - } - - /** Write the given buffer to the internal string stream object. - @param[in] buf the buffer whose contents will be logged. - @param[in] count the length of the buffer buf. - @return the output stream into which buffer was written. */ - ATTRIBUTE_COLD - std::ostream& - write( - const char* buf, - std::streamsize count) - { - return(m_oss.write(buf, count)); - } - - /** Write the given buffer to the internal string stream object. - @param[in] buf the buffer whose contents will be logged. - @param[in] count the length of the buffer buf. - @return the output stream into which buffer was written. */ - ATTRIBUTE_COLD - std::ostream& - write( - const byte* buf, - std::streamsize count) - { - return(m_oss.write(reinterpret_cast<const char*>(buf), count)); - } - - std::ostringstream m_oss; +class logger +{ protected: - /* This class must not be used directly, hence making the default - constructor protected. */ - ATTRIBUTE_COLD - logger() {} + /* This class must not be used directly */ + ATTRIBUTE_COLD ATTRIBUTE_NOINLINE logger() {} +public: + template<typename T> ATTRIBUTE_COLD ATTRIBUTE_NOINLINE + logger& operator<<(const T& rhs) + { + m_oss << rhs; + return *this; + } + + /** Handle a fixed character string in the same way as a pointer to + an unknown-length character string, to reduce object code bloat. */ + template<size_t N> logger& operator<<(const char (&rhs)[N]) + { return *this << static_cast<const char*>(rhs); } + + /** Output an error code name */ + ATTRIBUTE_COLD logger& operator<<(dberr_t err); + + /** Append a string. + @param buf string buffer + @param size buffer size + @return the output stream */ + ATTRIBUTE_COLD __attribute__((noinline)) + std::ostream &write(const char *buf, std::streamsize size) + { + return m_oss.write(buf, size); + } + + std::ostream &write(const byte *buf, std::streamsize size) + { return write(reinterpret_cast<const char*>(buf), size); } + + std::ostringstream m_oss; }; /** The class info is used to emit informational log messages. It is to be |