Path: blob/master/runtime/gc_structs/ConstantPoolObjectSlotIterator.hpp
5985 views
1/*******************************************************************************2* Copyright (c) 1991, 2019 IBM Corp. and others3*4* This program and the accompanying materials are made available under5* the terms of the Eclipse Public License 2.0 which accompanies this6* distribution and is available at https://www.eclipse.org/legal/epl-2.0/7* or the Apache License, Version 2.0 which accompanies this distribution and8* is available at https://www.apache.org/licenses/LICENSE-2.0.9*10* This Source Code may also be made available under the following11* Secondary Licenses when the conditions for such availability set12* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU13* General Public License, version 2 with the GNU Classpath14* Exception [1] and GNU General Public License, version 2 with the15* OpenJDK Assembly Exception [2].16*17* [1] https://www.gnu.org/software/classpath/license.html18* [2] http://openjdk.java.net/legal/assembly-exception.html19*20* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception21*******************************************************************************/2223/**24* @file25* @ingroup GC_Structs26*/2728#if !defined(CONSTANTPOOLOBJECTSLOTITERATOR_HPP_)29#define CONSTANTPOOLOBJECTSLOTITERATOR_HPP_3031#include "j9.h"32#include "j9cfg.h"33#include "j9cp.h"34#include "modron.h"35#include "j2sever.h"36#include "ModronAssertions.h"373839#include "ConstantDynamicSlotIterator.hpp"4041/**42* Iterate over object references (but not class references) in the constant pool of a class.43*44* @see GC_ConstantPoolClassSlotIterator45* @ingroup GC_Structs46*/47class GC_ConstantPoolObjectSlotIterator48{49j9object_t *_cpEntry;50U_32 _cpEntryCount;51U_32 _cpEntryTotal;52U_32 *_cpDescriptionSlots;53U_32 _cpDescription;54UDATA _cpDescriptionIndex;55GC_ConstantDynamicSlotIterator _constantDynamicSlotIterator;5657public:5859GC_ConstantPoolObjectSlotIterator(J9JavaVM *vm, J9Class *clazz) :60_cpEntry((j9object_t *)J9_CP_FROM_CLASS(clazz)),61_cpEntryCount(clazz->romClass->ramConstantPoolCount),62_constantDynamicSlotIterator()63{64_cpEntryTotal = _cpEntryCount;65if(_cpEntryCount) {66_cpDescriptionSlots = SRP_PTR_GET(&clazz->romClass->cpShapeDescription, U_32 *);67_cpDescriptionIndex = 0;68}69};7071/**72* Gets the current constant pool index.73* @return zero based constant pool index of the entry returned by the last call of nextSlot.74* @return -1 if nextSlot has yet to be called.75*/76MMINLINE IDATA getIndex() {77return _cpEntryTotal - _cpEntryCount - 1;78}7980j9object_t *nextSlot();8182};8384#endif /* CONSTANTPOOLOBJECTSLOTITERATOR_HPP_ */858687