/* * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package com.sun.max.vm.object; import com.sun.max.annotate.*; import com.sun.max.unsafe.*; import com.sun.max.vm.reference.*; /** * This class implements a facade for tuple class (i.e. non-array and non-hybrid objects) * references that allows access to object fields with object parameters instead of {@code Reference} * parameters. */ public final class TupleAccess { private TupleAccess() { } /** * Reads a byte from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static byte readByte(Object tuple, Offset offset) { return Reference.fromJava(tuple).readByte(offset); } /** * Reads a byte from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static byte readByte(Object tuple, int offset) { return Reference.fromJava(tuple).readByte(offset); } /** * Write a byte into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeByte(Object tuple, Offset offset, byte value) { Reference.fromJava(tuple).writeByte(offset, value); } /** * Write a byte into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeByte(Object tuple, int offset, byte value) { Reference.fromJava(tuple).writeByte(offset, value); } /** * Reads a boolean from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static boolean readBoolean(Object tuple, Offset offset) { return Reference.fromJava(tuple).readBoolean(offset); } /** * Reads a boolean from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static boolean readBoolean(Object tuple, int offset) { return Reference.fromJava(tuple).readBoolean(offset); } /** * Write a boolean into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeBoolean(Object tuple, Offset offset, boolean value) { Reference.fromJava(tuple).writeBoolean(offset, value); } /** * Write a boolean into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeBoolean(Object tuple, int offset, boolean value) { Reference.fromJava(tuple).writeBoolean(offset, value); } /** * Reads a short from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static short readShort(Object tuple, Offset offset) { return Reference.fromJava(tuple).readShort(offset); } /** * Reads a short from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static short readShort(Object tuple, int offset) { return Reference.fromJava(tuple).readShort(offset); } /** * Write a short into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeShort(Object tuple, Offset offset, short value) { Reference.fromJava(tuple).writeShort(offset, value); } /** * Write a short into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeShort(Object tuple, int offset, short value) { Reference.fromJava(tuple).writeShort(offset, value); } /** * Reads a char from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static char readChar(Object tuple, Offset offset) { return Reference.fromJava(tuple).readChar(offset); } /** * Reads a char from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static char readChar(Object tuple, int offset) { return Reference.fromJava(tuple).readChar(offset); } /** * Write a char into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeChar(Object tuple, Offset offset, char value) { Reference.fromJava(tuple).writeChar(offset, value); } /** * Write a char into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeChar(Object tuple, int offset, char value) { Reference.fromJava(tuple).writeChar(offset, value); } /** * Reads an int from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static int readInt(Object tuple, Offset offset) { return Reference.fromJava(tuple).readInt(offset); } /** * Reads an int from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static int readInt(Object tuple, int offset) { return Reference.fromJava(tuple).readInt(offset); } /** * Write an int into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeInt(Object tuple, Offset offset, int value) { Reference.fromJava(tuple).writeInt(offset, value); } /** * Write an int into the specified object at the specified offset. * * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeInt(Object tuple, int offset, int value) { Reference.fromJava(tuple).writeInt(offset, value); } /** * Reads a float from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static float readFloat(Object tuple, Offset offset) { return Reference.fromJava(tuple).readFloat(offset); } /** * Reads a float from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static float readFloat(Object tuple, int offset) { return Reference.fromJava(tuple).readFloat(offset); } /** * Write a float into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeFloat(Object tuple, Offset offset, float value) { Reference.fromJava(tuple).writeFloat(offset, value); } /** * Write a float into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeFloat(Object tuple, int offset, float value) { Reference.fromJava(tuple).writeFloat(offset, value); } /** * Reads a long from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static long readLong(Object tuple, Offset offset) { return Reference.fromJava(tuple).readLong(offset); } /** * Reads a long from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static long readLong(Object tuple, int offset) { return Reference.fromJava(tuple).readLong(offset); } /** * Write a long into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeLong(Object tuple, Offset offset, long value) { Reference.fromJava(tuple).writeLong(offset, value); } /** * Write a long into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeLong(Object tuple, int offset, long value) { Reference.fromJava(tuple).writeLong(offset, value); } /** * Reads a double from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static double readDouble(Object tuple, Offset offset) { return Reference.fromJava(tuple).readDouble(offset); } /** * Reads a double from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static double readDouble(Object tuple, int offset) { return Reference.fromJava(tuple).readDouble(offset); } /** * Write a double into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeDouble(Object tuple, Offset offset, double value) { Reference.fromJava(tuple).writeDouble(offset, value); } /** * Write a double into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeDouble(Object tuple, int offset, double value) { Reference.fromJava(tuple).writeDouble(offset, value); } /** * Reads a word from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static Word readWord(Object tuple, Offset offset) { return Reference.fromJava(tuple).readWord(offset); } /** * Reads a word from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static Word readWord(Object tuple, int offset) { return Reference.fromJava(tuple).readWord(offset); } /** * Write a word into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeWord(Object tuple, Offset offset, Word value) { Reference.fromJava(tuple).writeWord(offset, value); } /** * Write a word into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeWord(Object tuple, int offset, Word value) { Reference.fromJava(tuple).writeWord(offset, value); } /** * Reads a reference from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static Object readObject(Object tuple, Offset offset) { return Reference.fromJava(tuple).readReference(offset).toJava(); } /** * Reads a reference from the specified object at the specified offset. * @param tuple the object to read the value from * @param offset the offset from the origin of the object * @return the value at the specified index from the object */ @INLINE public static Object readObject(Object tuple, int offset) { return Reference.fromJava(tuple).readReference(offset).toJava(); } /** * Writes a reference into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeObject(Object tuple, Offset offset, Object value) { Reference.fromJava(tuple).writeReference(offset, Reference.fromJava(value)); } /** * Writes a reference into the specified object at the specified offset. * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @INLINE public static void writeObject(Object tuple, int offset, Object value) { Reference.fromJava(tuple).writeReference(offset, Reference.fromJava(value)); } /** * Writes a reference into the specified object at the specified offset. * * @param tuple the object to write the value into * @param offset the offset from the origin of the object * @param value the value to write into the object */ @NEVER_INLINE public static void noninlineWriteObject(Object tuple, int offset, Object value) { writeObject(tuple, offset, value); } }