64 * version greater than 5? Answer: no). Once the JDK probing occurs, we
65 * know the version and are considered fully initialized.
66 */
67 class JDK_Version VALUE_OBJ_CLASS_SPEC {
68 friend class VMStructs;
69 friend class Universe;
70 friend void JDK_Version_init();
71 private:
72
73 static JDK_Version _current;
74 static const char* _runtime_name;
75 static const char* _runtime_version;
76
77 // In this class, we promote the minor version of release to be the
78 // major version for releases >= 5 in anticipation of the JDK doing the
79 // same thing. For example, we represent "1.5.0" as major version 5 (we
80 // drop the leading 1 and use 5 as the 'major').
81
82 uint8_t _major;
83 uint8_t _minor;
84 uint8_t _micro;
85 uint8_t _update;
86 uint8_t _special;
87 uint8_t _build;
88
89 // If partially initialized, the above fields are invalid and we know
90 // that we're less than major version 6.
91 bool _partially_initialized;
92
93 bool _thread_park_blocker;
94 bool _post_vm_init_hook_enabled;
95
96 bool is_valid() const {
97 return (_major != 0 || _partially_initialized);
98 }
99
100 // initializes or partially initializes the _current static field
101 static void initialize();
102
103 // Completes initialization for a pre-JDK6 version.
104 static void fully_initialize(uint8_t major, uint8_t minor = 0,
105 uint8_t micro = 0, uint8_t update = 0);
106
107 public:
108
109 // Returns true if the the current version has only been partially initialized
110 static bool is_partially_initialized() {
111 return _current._partially_initialized;
112 }
113
114 JDK_Version() : _major(0), _minor(0), _micro(0), _update(0),
115 _special(0), _build(0), _partially_initialized(false),
116 _thread_park_blocker(false), _post_vm_init_hook_enabled(false)
117 {}
118
119 JDK_Version(uint8_t major, uint8_t minor = 0, uint8_t micro = 0,
120 uint8_t update = 0, uint8_t special = 0, uint8_t build = 0,
121 bool thread_park_blocker = false, bool post_vm_init_hook_enabled = false) :
122 _major(major), _minor(minor), _micro(micro), _update(update),
123 _special(special), _build(build), _partially_initialized(false),
124 _thread_park_blocker(thread_park_blocker),
125 _post_vm_init_hook_enabled(post_vm_init_hook_enabled)
126 {}
127
128 // Returns the current running JDK version
129 static JDK_Version current() { return _current; }
130
131 // Factory methods for convenience
132 static JDK_Version jdk(uint8_t m) {
133 return JDK_Version(m);
134 }
135
136 static JDK_Version jdk_update(uint8_t major, uint8_t update_number) {
137 return JDK_Version(major, 0, 0, update_number);
138 }
139
140 uint8_t major_version() const { return _major; }
141 uint8_t minor_version() const { return _minor; }
142 uint8_t micro_version() const { return _micro; }
143 uint8_t update_version() const { return _update; }
144 uint8_t special_update_version() const { return _special; }
145 uint8_t build_number() const { return _build; }
146
147 bool supports_thread_park_blocker() const {
148 return _thread_park_blocker;
149 }
150 bool post_vm_init_hook_enabled() const {
151 return _post_vm_init_hook_enabled;
152 }
153
154 // Performs a full ordering comparison using all fields (update, build, etc.)
155 int compare(const JDK_Version& other) const;
156
157 /**
158 * Performs comparison using only the major version, returning negative
159 * if the major version of 'this' is less than the parameter, 0 if it is
160 * equal, and a positive value if it is greater.
161 */
162 int compare_major(int version) const {
|
64 * version greater than 5? Answer: no). Once the JDK probing occurs, we
65 * know the version and are considered fully initialized.
66 */
67 class JDK_Version VALUE_OBJ_CLASS_SPEC {
68 friend class VMStructs;
69 friend class Universe;
70 friend void JDK_Version_init();
71 private:
72
73 static JDK_Version _current;
74 static const char* _runtime_name;
75 static const char* _runtime_version;
76
77 // In this class, we promote the minor version of release to be the
78 // major version for releases >= 5 in anticipation of the JDK doing the
79 // same thing. For example, we represent "1.5.0" as major version 5 (we
80 // drop the leading 1 and use 5 as the 'major').
81
82 uint8_t _major;
83 uint8_t _minor;
84 uint8_t _security;
85 uint8_t _update;
86 uint8_t _special;
87 uint8_t _build;
88
89 // If partially initialized, the above fields are invalid and we know
90 // that we're less than major version 6.
91 bool _partially_initialized;
92
93 bool _thread_park_blocker;
94 bool _post_vm_init_hook_enabled;
95
96 bool is_valid() const {
97 return (_major != 0 || _partially_initialized);
98 }
99
100 // initializes or partially initializes the _current static field
101 static void initialize();
102
103 // Completes initialization for a pre-JDK6 version.
104 static void fully_initialize(uint8_t major, uint8_t minor = 0,
105 uint8_t security = 0, uint8_t update = 0);
106
107 public:
108
109 // Returns true if the the current version has only been partially initialized
110 static bool is_partially_initialized() {
111 return _current._partially_initialized;
112 }
113
114 JDK_Version() : _major(0), _minor(0), _security(0), _update(0),
115 _special(0), _build(0), _partially_initialized(false),
116 _thread_park_blocker(false), _post_vm_init_hook_enabled(false)
117 {}
118
119 JDK_Version(uint8_t major, uint8_t minor = 0, uint8_t security = 0,
120 uint8_t update = 0, uint8_t special = 0, uint8_t build = 0,
121 bool thread_park_blocker = false, bool post_vm_init_hook_enabled = false) :
122 _major(major), _minor(minor), _security(security), _update(update),
123 _special(special), _build(build), _partially_initialized(false),
124 _thread_park_blocker(thread_park_blocker),
125 _post_vm_init_hook_enabled(post_vm_init_hook_enabled)
126 {}
127
128 // Returns the current running JDK version
129 static JDK_Version current() { return _current; }
130
131 // Factory methods for convenience
132 static JDK_Version jdk(uint8_t m) {
133 return JDK_Version(m);
134 }
135
136 static JDK_Version jdk_update(uint8_t major, uint8_t update_number) {
137 return JDK_Version(major, 0, 0, update_number);
138 }
139
140 uint8_t major_version() const { return _major; }
141 uint8_t minor_version() const { return _minor; }
142 uint8_t security_version() const { return _security; }
143 uint8_t update_version() const { return _update; }
144 uint8_t special_update_version() const { return _special; }
145 uint8_t build_number() const { return _build; }
146
147 bool supports_thread_park_blocker() const {
148 return _thread_park_blocker;
149 }
150 bool post_vm_init_hook_enabled() const {
151 return _post_vm_init_hook_enabled;
152 }
153
154 // Performs a full ordering comparison using all fields (update, build, etc.)
155 int compare(const JDK_Version& other) const;
156
157 /**
158 * Performs comparison using only the major version, returning negative
159 * if the major version of 'this' is less than the parameter, 0 if it is
160 * equal, and a positive value if it is greater.
161 */
162 int compare_major(int version) const {
|