< prev index next >

src/share/vm/logging/logTagSet.hpp

Print this page
rev 8933 : 8046148.01

@@ -21,20 +21,21 @@
  * questions.
  *
  */
 #ifndef SHARE_VM_LOGGING_LOGTAGSET_HPP
 #define SHARE_VM_LOGGING_LOGTAGSET_HPP
+
 #include "logging/logDecorators.hpp"
 #include "logging/logLevel.hpp"
 #include "logging/logOutputList.hpp"
 #include "logging/logTag.hpp"
 #include "utilities/globalDefinitions.hpp"
 
 // The tagset represents a combination of tags that occur in a log call somewhere.
 // Tagsets are created automatically by the LogTagSetMappings and should never be
 // instantiated directly somewhere else.
-class LogTagSet {
+class LogTagSet VALUE_OBJ_CLASS_SPEC {
  private:
   static LogTagSet* _list;
   static size_t     _ntagsets;
 
   LogTagSet* const  _next;

@@ -85,20 +86,23 @@
   bool has_output(const LogOutput* output);
   bool is_level(LogLevelType level);
   void log(LogLevelType level, const char* msg);
 };
 
-template <LogTagType T0, LogTagType T1 = LogTag::__NO_TAG, LogTagType T2 = LogTag::__NO_TAG, LogTagType T3 = LogTag::__NO_TAG, LogTagType T4 = LogTag::__NO_TAG>
-class LogTagSetMapping {
+template <LogTagType T0, LogTagType T1 = LogTag::__NO_TAG, LogTagType T2 = LogTag::__NO_TAG,
+          LogTagType T3 = LogTag::__NO_TAG, LogTagType T4 = LogTag::__NO_TAG>
+class LogTagSetMapping : public AllStatic {
 private:
   static LogTagSet _tagset;
 
 public:
   static LogTagSet& tagset() {
     return _tagset;
   }
 };
 
+// Instantiate the static field _tagset for all tagsets that are used for logging somewhere.
+// (This must be done here rather than the .cpp file because it's a template.)
 template <LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4>
 LogTagSet LogTagSetMapping<T0, T1, T2, T3, T4>::_tagset(T0, T1, T2, T3, T4);
 
-#endif
+#endif // SHARE_VM_LOGGING_LOGTAGSET_HPP
< prev index next >