Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/prims/foreign_globals.inline.hpp
41144 views
1
/*
2
* Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
#ifndef SHARE_PRIMS_FOREIGN_GLOBALS_INLINE_HPP
25
#define SHARE_PRIMS_FOREIGN_GLOBALS_INLINE_HPP
26
27
#include "prims/foreign_globals.hpp"
28
29
#include "oops/oopsHierarchy.hpp"
30
#include "oops/objArrayOop.hpp"
31
32
template<typename T>
33
static bool check_type(oop theOop) {
34
static_assert(sizeof(T) == 0, "No check_type specialization found for this type");
35
return false;
36
}
37
template<>
38
inline bool check_type<objArrayOop>(oop theOop) { return theOop->is_objArray(); }
39
template<>
40
inline bool check_type<typeArrayOop>(oop theOop) { return theOop->is_typeArray(); }
41
42
template<typename R>
43
R ForeignGlobals::cast(oop theOop) {
44
assert(check_type<R>(theOop), "Invalid cast");
45
return (R) theOop;
46
}
47
48
template<typename T, typename Func>
49
void ForeignGlobals::loadArray(objArrayOop jarray, int type_index, GrowableArray<T>& array, Func converter) const {
50
objArrayOop subarray = cast<objArrayOop>(jarray->obj_at(type_index));
51
int subarray_length = subarray->length();
52
for (int i = 0; i < subarray_length; i++) {
53
oop storage = subarray->obj_at(i);
54
jint index = storage->int_field(VMS.index_offset);
55
array.push(converter(index));
56
}
57
}
58
59
#endif // SHARE_PRIMS_FOREIGN_GLOBALS_INLINE_HPP
60
61