⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btreenodefileuos.java

📁 国外的数据结构与算法分析用书
💻 JAVA
字号:
/* BtreeNodeFileUos.java
 * ---------------------------------------------
 * Copyright (c) 2001 University of Saskatchewan
 * All Rights Reserved
 * --------------------------------------------- */

package dslib.file;

import java.io.IOException;

/**	This class implements a file that is specifically designed to store 
	Btree interior nodes. It saves file addresses for discarded nodes and 
	allows these addresses to be returned for reuse by other nodes. */
public class BtreeNodeFileUos extends ObjectFileUos
{
	/**	The maximum number of bytes that a node can take up when written to disk.  */
	protected int nodeSize; 
	
	/**	The name of the file associated with this object */
	protected String name;

	/**	Return the maximum number of bytes that a node
		can take up when written to disk. 
		Analysis : Time = O(1) */
	public int nodeSize()
	{
		return nodeSize;
	}

	/**	The last address of a node returned for reuse;  -1 if no address has been returned yet. */
	protected long lastReturnedAddress;

	/**	The last address of a node returned for reuse.  -1 if no address has been returned yet. <br>
		Analysis : Time = O(1) */
	public long lastReturnedAddress() 
	{
		return lastReturnedAddress;
	}     

	/**	The next address that will be given out if no more recovered addresses
		are left to be given out. */
	protected long nextAddress;

	/**	Create a node file from the data contained within a BtreeFileHeaderUos object. <br>
		Analysis : Time = O(1) + 1 file write
		@param h The file header where data about a previous node file is stored */
	public BtreeNodeFileUos(BtreeFileHeaderUos h)
	{
		super(h.nodeFileName(), "rw");
		nextAddress = h.nextNodeAddress;
		name = h.nodeFileName();
		nodeSize = h.nodeSize;
		lastReturnedAddress = h.firstFreeNodeAddress;
	}

	/**	Create a new node file from a given file name. <br>
		Analysis : Time = O(1) + 1 file write
		@param n The name of the file where nodes will be written
		@param ns The maximum size (in bytes) that nodes will be when written to disk */
	public BtreeNodeFileUos(String n, int ns) 
	{
		super(n, "rw");
		/* The call to super will move the file pointer to the byte offset
		   that is equal to the size of a file header for the ObjectStreams */
		nextAddress = position();
		name = n;
		nodeSize = ns;
		lastReturnedAddress = -1;
	}	

	/**	Add nodeAddress to the list of addresses available for future nodes. <br>
		Analysis : Time = O(1) + 1 file write 
		@param nodeAddress The address to be returned for reuse */
	public void recoverNodeAddress(long nodeAddress)  
	{
		writeObjectAt(new Long(lastReturnedAddress), nodeAddress);
		lastReturnedAddress = nodeAddress;
	}

	/**	Obtain the next avalible file address. <br>
		Analysis : Time = O(1) + 1 file read. */
	public long getNextFileAddress()
	{
		long result;
		if (lastReturnedAddress == -1) 
		{
			result = nextAddress;
			nextAddress += nodeSize;
		}
		else
		{
			result = lastReturnedAddress;
			lastReturnedAddress = ((Long) readObjectFrom(lastReturnedAddress)).longValue();
		} 
		return result;
	}   

	/**	Write newNode to disk. <br>
		Analysis : Time = O(1) + 1 file write. 
		@param newNode The node to be written to disk */
	public void writeNode(BtreeInteriorUos newNode)
	{
		writeObjectAt(newNode, newNode.fileAddress());
	}

	/**	Read a node from a specific location on disk. <br>
		Analysis: Time = O(1) file read 
		@param address The address on disk where a node will be read */
	public BtreeInteriorUos readNode(long address)
	{
		return (BtreeInteriorUos) readObjectFrom(address);
	}
}

⌨️ 快捷键说明

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