< prev index next >

src/hotspot/share/logging/logHandle.hpp

Print this page
rev 58036 : [mq]: asynclog

*** 1,7 **** /* ! * Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 22,31 **** --- 22,32 ---- * */ #ifndef SHARE_LOGGING_LOGHANDLE_HPP #define SHARE_LOGGING_LOGHANDLE_HPP + #include "logging/asynclog.hpp" #include "logging/log.hpp" // Wraps a Log instance and throws away the template information. // // This can be used to pass a Log instance as a parameter without
*** 68,89 **** // Wraps a LogTarget instance and throws away the template information. // // This can be used to pass a Log instance as a parameter without // polluting the surrounding API with template functions. ! class LogTargetHandle { ! private: const LogLevelType _level; LogTagSet* _tagset; public: ! LogTargetHandle(LogLevelType level, LogTagSet* tagset) : _level(level), _tagset(tagset) {} template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> LogTargetHandle(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) : ! _level(level), ! _tagset(&LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {} template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> static LogTargetHandle create() { return LogTargetHandle(LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>()); } --- 69,114 ---- // Wraps a LogTarget instance and throws away the template information. // // This can be used to pass a Log instance as a parameter without // polluting the surrounding API with template functions. ! template<typename D> ! class LogTargetHandleBase { ! protected : const LogLevelType _level; LogTagSet* _tagset; + LogTargetHandleBase(LogLevelType level, LogTagSet* tagset) : _level(level), _tagset(tagset) {} + public: ! void print(const char* fmt, ...) ATTRIBUTE_PRINTF(2, 3) { ! va_list args; ! va_start(args, fmt); ! static_cast<D*>(this)->print(fmt,args); ! va_end(args); ! } ! ! bool is_enabled() const { ! return _tagset->is_level(_level); ! } ! ! LogLevelType level() const { ! return _level; ! } ! ! LogTagSet* tagset() const { ! return _tagset; ! } ! }; ! ! class LogTargetHandle : public LogTargetHandleBase<LogTargetHandle> { ! public: ! LogTargetHandle(LogLevelType level, LogTagSet* tagset) : LogTargetHandleBase<LogTargetHandle>(level, tagset) {} template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> LogTargetHandle(const LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) : ! LogTargetHandleBase<LogTargetHandle>(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {} template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> static LogTargetHandle create() { return LogTargetHandle(LogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>()); }
*** 92,104 **** va_list args; va_start(args, fmt); _tagset->vwrite(_level, fmt, args); va_end(args); } ! bool is_enabled() const { ! return _tagset->is_level(_level); } }; #endif // SHARE_LOGGING_LOGHANDLE_HPP --- 117,141 ---- va_list args; va_start(args, fmt); _tagset->vwrite(_level, fmt, args); va_end(args); } + }; ! class AsyncLogTargetHandle : public LogTargetHandleBase<AsyncLogTargetHandle> { ! public: ! template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> ! AsyncLogTargetHandle(const AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>& type_carrier) : ! LogTargetHandleBase<AsyncLogTargetHandle>(level, &LogTagSetMapping<T0, T1, T2, T3, T4>::tagset()) {} ! ! template <LogLevelType level, LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag> ! static AsyncLogTargetHandle create() { ! return AsyncLogTargetHandle(AsyncLogTargetImpl<level, T0, T1, T2, T3, T4, GuardTag>()); } + void print(const char* fmt, ...) ATTRIBUTE_PRINTF(2, 3) { + DEBUG_ONLY(ShouldNotReachHere()); + } }; + #endif // SHARE_LOGGING_LOGHANDLE_HPP
< prev index next >