address.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 84 行

JAVA
84
字号
/*
 * $Id: Address.java,v 1.2 2003/11/28 09:12:35 epr Exp $
 */
package org.jnode.vm;

import org.jnode.vm.classmgr.VmArray;

/**
 * Address is not a normal Java object. Instead it is used as a reference
 * to a virtual memory address. Variables of this type are not considered to
 * be objects by the garbage collector.
 * @author epr
 */
public abstract class Address extends VmSystemObject {
	
	/**
	 * Convert a 32-bit (int) address into an Address reference.
	 * @param ptr32
	 * @return Address
	 */
	public static Address valueOf(int ptr32) {
		return Unsafe.intToAddress(ptr32); 
	}

	/**
	 * Convert a 64-bit (long) address into an Address reference.
	 * @param ptr64
	 * @return Address
	 */
	public static Address valueOf(long ptr64) {
		return Unsafe.longToAddress(ptr64); 
	}

	/**
	 * Convert an Object reference into an Address reference.
	 * @param object
	 * @return Address
	 */
	public static Address valueOf(Object object) {
		return Unsafe.addressOf(object); 
	}
	
	/**
	 * Gets the address of the start of the data of a given array.
	 * @param arrayObject
	 * @return Address
	 */
	public static Address addressOfArrayData(Object arrayObject) {
		final int slotSize = Unsafe.getCurrentProcessor().getArchitecture().getReferenceSize();
		final Address objAddr = Unsafe.addressOf(arrayObject);
		return Unsafe.add(objAddr, (VmArray.DATA_OFFSET * slotSize));
	}
	
	/**
	 * Convert an address to a 32-bit integer.
	 * @param address
	 * @return int
	 */
	public static int as32bit(Address address) {
		return Unsafe.addressToInt(address);
	}

	/**
	 * Convert an address to a 64-bit integer.
	 * @param address
	 * @return long
	 */
	public static long as64bit(Address address) {
		return Unsafe.addressToLong(address);
	}
	
	public static long distance(Address a1, Address a2) {
		return Math.abs(Unsafe.addressToLong(a2) - Unsafe.addressToLong(a1));
	}
	
	public static Address add(Address a, int incValue) {
		return Unsafe.add(a, incValue); 
	}
	
	public static int compare(Address a1, Address a2) {
		return Unsafe.compare(a1, a2);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?