< prev index next >
src/share/vm/utilities/debug.hpp
Print this page
rev 13108 : imported patch move_format_buffer
*** 24,123 ****
#ifndef SHARE_VM_UTILITIES_DEBUG_HPP
#define SHARE_VM_UTILITIES_DEBUG_HPP
#include "utilities/globalDefinitions.hpp"
- #include "prims/jvm.h"
-
- #include <stdarg.h>
-
- // Simple class to format the ctor arguments into a fixed-sized buffer.
- class FormatBufferBase {
- protected:
- char* _buf;
- inline FormatBufferBase(char* buf) : _buf(buf) {}
- public:
- static const int BufferSize = 256;
- operator const char *() const { return _buf; }
- };
-
- // Use resource area for buffer
- class FormatBufferResource : public FormatBufferBase {
- public:
- FormatBufferResource(const char * format, ...) ATTRIBUTE_PRINTF(2, 3);
- };
-
- class FormatBufferDummy {};
-
- // Use stack for buffer
- template <size_t bufsz = FormatBufferBase::BufferSize>
- class FormatBuffer : public FormatBufferBase {
- public:
- inline FormatBuffer(const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
- // since va_list is unspecified type (can be char*), we use FormatBufferDummy to disambiguate these constructors
- inline FormatBuffer(FormatBufferDummy dummy, const char* format, va_list ap) ATTRIBUTE_PRINTF(3, 0);
- inline void append(const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
- inline void print(const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
- inline void printv(const char* format, va_list ap) ATTRIBUTE_PRINTF(2, 0);
-
- char* buffer() { return _buf; }
- int size() { return bufsz; }
-
- private:
- FormatBuffer(const FormatBuffer &); // prevent copies
- char _buffer[bufsz];
-
- protected:
- inline FormatBuffer();
- };
-
- template <size_t bufsz>
- FormatBuffer<bufsz>::FormatBuffer(const char * format, ...) : FormatBufferBase(_buffer) {
- va_list argp;
- va_start(argp, format);
- jio_vsnprintf(_buf, bufsz, format, argp);
- va_end(argp);
- }
-
- template <size_t bufsz>
- FormatBuffer<bufsz>::FormatBuffer(FormatBufferDummy dummy, const char * format, va_list ap) : FormatBufferBase(_buffer) {
- jio_vsnprintf(_buf, bufsz, format, ap);
- }
-
- template <size_t bufsz>
- FormatBuffer<bufsz>::FormatBuffer() : FormatBufferBase(_buffer) {
- _buf[0] = '\0';
- }
-
- template <size_t bufsz>
- void FormatBuffer<bufsz>::print(const char * format, ...) {
- va_list argp;
- va_start(argp, format);
- jio_vsnprintf(_buf, bufsz, format, argp);
- va_end(argp);
- }
-
- template <size_t bufsz>
- void FormatBuffer<bufsz>::printv(const char * format, va_list argp) {
- jio_vsnprintf(_buf, bufsz, format, argp);
- }
-
- template <size_t bufsz>
- void FormatBuffer<bufsz>::append(const char* format, ...) {
- // Given that the constructor does a vsnprintf we can assume that
- // _buf is already initialized.
- size_t len = strlen(_buf);
- char* buf_end = _buf + len;
-
- va_list argp;
- va_start(argp, format);
- jio_vsnprintf(buf_end, bufsz - len, format, argp);
- va_end(argp);
- }
-
- // Used to format messages.
- typedef FormatBuffer<> err_msg;
// assertions
#ifndef ASSERT
#define vmassert(p, ...)
#else
--- 24,33 ----
< prev index next >