1/*
2 * Copyright (c) 2016, 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
25#ifndef SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_INLINE_HPP
26#define SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_INLINE_HPP
27
28#include "gc/shared/referenceProcessor.hpp"
29#include "oops/oop.inline.hpp"
30
31oop DiscoveredList::head() const {
32  return UseCompressedOops ?  oopDesc::decode_heap_oop(_compressed_head) :
33    _oop_head;
34}
35
36void DiscoveredList::set_head(oop o) {
37  if (UseCompressedOops) {
38    // Must compress the head ptr.
39    _compressed_head = oopDesc::encode_heap_oop(o);
40  } else {
41    _oop_head = o;
42  }
43}
44
45bool DiscoveredList::is_empty() const {
46 return head() == NULL;
47}
48
49DiscoveredListIterator::DiscoveredListIterator(DiscoveredList&    refs_list,
50                                               OopClosure*        keep_alive,
51                                               BoolObjectClosure* is_alive):
52  _refs_list(refs_list),
53  _prev_next(refs_list.adr_head()),
54  _prev(NULL),
55  _ref(refs_list.head()),
56#ifdef ASSERT
57  _first_seen(refs_list.head()),
58#endif
59#ifndef PRODUCT
60  _processed(0),
61  _removed(0),
62#endif
63  _next(NULL),
64  _keep_alive(keep_alive),
65  _is_alive(is_alive) {
66}
67
68#endif // SHARE_VM_GC_SHARED_REFERENCEPROCESSOR_INLINE_HPP
69