From: <ga...@us...> - 2009-03-18 22:53:32
|
Revision: 5116 http://jnode.svn.sourceforge.net/jnode/?rev=5116&view=rev Author: galatnm Date: 2009-03-18 22:53:16 +0000 (Wed, 18 Mar 2009) Log Message: ----------- rewrite BTHeaderRecord and add javadocs. Modified Paths: -------------- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java trunk/fs/src/fs/org/jnode/fs/hfsplus/extent/Extent.java trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-03-18 21:27:56 UTC (rev 5115) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/catalog/Catalog.java 2009-03-18 22:53:16 UTC (rev 5116) @@ -22,15 +22,12 @@ import java.io.IOException; import java.nio.ByteBuffer; -import java.util.Calendar; -import java.util.Date; import java.util.LinkedList; import java.util.List; import org.apache.log4j.Logger; import org.jnode.fs.hfsplus.HFSPlusParams; import org.jnode.fs.hfsplus.HFSUnicodeString; -import org.jnode.fs.hfsplus.HFSUtils; import org.jnode.fs.hfsplus.HfsPlusConstants; import org.jnode.fs.hfsplus.HfsPlusFileSystem; import org.jnode.fs.hfsplus.Superblock; @@ -100,17 +97,13 @@ btnd.setRecordCount(3); bufferLength += NodeDescriptor.BT_NODE_DESCRIPTOR_LENGTH; // - bthr = new BTHeaderRecord(); - bthr.setTreeDepth(1); - bthr.setRootNode(1); - bthr.settFirstLeafNode(1); - bthr.setLastLeafNode(1); - bthr.setLeafRecords(params.isJournaled() ? 6 : 2); - bthr.setNodeSize(nodeSize); - bthr.setTotalNodes(params.getCatalogClumpSize() / params.getCatalogNodeSize()); - bthr.setFreeNodes(bthr.getTotalNodes() - 2); - bthr.setClumpSize(params.getCatalogClumpSize()); - // TODO initialize attributes, max key length and key comparaison type. + int leafRecords = params.isJournaled() ? 6 : 2; + int totalNodes = params.getCatalogClumpSize() / params.getCatalogNodeSize(); + int freeNodes = totalNodes - 2; + bthr = + new BTHeaderRecord(1, 1, leafRecords, 1, 1, nodeSize, 0, totalNodes, freeNodes, + params.getCatalogClumpSize(), 0, 0, 0); + bufferLength += BTHeaderRecord.BT_HEADER_RECORD_LENGTH; // Create root node int rootNodePosition = bthr.getRootNode() * nodeSize; Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/extent/Extent.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/extent/Extent.java 2009-03-18 21:27:56 UTC (rev 5115) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/extent/Extent.java 2009-03-18 22:53:16 UTC (rev 5116) @@ -17,7 +17,7 @@ * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ - + package org.jnode.fs.hfsplus.extent; import org.jnode.fs.hfsplus.HFSPlusParams; @@ -35,17 +35,11 @@ btnd.setHeight(0); btnd.setRecordCount(3); // - bthr = new BTHeaderRecord(); - bthr.setTreeDepth(0); - bthr.setRootNode(0); - bthr.settFirstLeafNode(0); - bthr.setLastLeafNode(0); - bthr.setLeafRecords(0); - bthr.setNodeSize(params.getExtentNodeSize()); - bthr.setTotalNodes(params.getExtentClumpSize() - / params.getExtentNodeSize()); - bthr.setFreeNodes(bthr.getTotalNodes() - 1); - bthr.setClumpSize(params.getExtentClumpSize()); - bthr.setMaxKeyLength(ExtentKey.KEY_LENGTH); + int totalNodes = params.getExtentClumpSize() / params.getExtentNodeSize(); + int freeNodes = totalNodes - 1; + bthr = + new BTHeaderRecord(0, 0, 0, 0, 0, params.getExtentNodeSize(), ExtentKey.KEY_LENGTH, + totalNodes, freeNodes, params.getExtentClumpSize(), 0, 0, 0); + } } Modified: trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java =================================================================== --- trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java 2009-03-18 21:27:56 UTC (rev 5115) +++ trunk/fs/src/fs/org/jnode/fs/hfsplus/tree/BTHeaderRecord.java 2009-03-18 22:53:16 UTC (rev 5116) @@ -17,135 +17,151 @@ * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ - + package org.jnode.fs.hfsplus.tree; import org.jnode.util.BigEndian; public class BTHeaderRecord { public static final int BT_HEADER_RECORD_LENGTH = 106; - private byte[] data; + /** The depth of the current B-Tree. */ + private int treeDepth; + /** The root node number */ + private int rootNode; + /** The number of records contains in all leaf nodes. */ + private int leafRecords; + /** The number of the first leaf node. This may be zero. */ + private int firstLeafNode; + /** The number of the last leaf node. This may be zero. */ + private int lastLeafNode; + /** The size in bytes of a node. */ + private int nodeSize; + /** The maximum length of a key. */ + private int maxKeyLength; + /** The total number of free or used nodes in the B-Tree. */ + private int totalNodes; + /** The number of free node in the B-Tree. */ + private int freeNodes; + /** + * Ignore for HFS+, clumpSize field from {@code HFSPlusForkData} used + * instead. + */ + private int clumpSize; + /** The type of the B-Tree. */ + private int treeType; + /** Ignore in HFS+, should be threat as reserved. */ + private int keyCompareType; + /** Various attributes of the B-Tree. */ + private int attributes; - public BTHeaderRecord() { - data = new byte[BT_HEADER_RECORD_LENGTH]; + public BTHeaderRecord(int treeDepth, int rootNode, int leafRecords, int firstLeafNode, + int lastLeafNode, int nodeSize, int maxKeyLength, int totalNodes, int freeNodes, + int clumpsize, int treeType, int keyCompareType, int attributes) { + this.treeDepth = treeDepth; + this.rootNode = rootNode; + this.leafRecords = leafRecords; + this.firstLeafNode = firstLeafNode; + this.lastLeafNode = lastLeafNode; + this.nodeSize = nodeSize; + this.maxKeyLength = maxKeyLength; + this.totalNodes = totalNodes; + this.freeNodes = freeNodes; + this.clumpSize = clumpsize; + this.treeType = treeType; + this.keyCompareType = keyCompareType; + this.attributes = attributes; } public BTHeaderRecord(final byte[] src, int offset) { - data = new byte[BT_HEADER_RECORD_LENGTH]; + byte[] data = new byte[BT_HEADER_RECORD_LENGTH]; System.arraycopy(src, offset, data, 0, BT_HEADER_RECORD_LENGTH); + treeDepth = BigEndian.getInt16(data, 0); + rootNode = BigEndian.getInt32(data, 2); + leafRecords = BigEndian.getInt32(data, 6); + firstLeafNode = BigEndian.getInt32(data, 10); + lastLeafNode = BigEndian.getInt32(data, 14); + nodeSize = BigEndian.getInt16(data, 18); + maxKeyLength = BigEndian.getInt16(data, 20); + totalNodes = BigEndian.getInt16(data, 24); + freeNodes = BigEndian.getInt16(data, 28); + clumpSize = BigEndian.getInt16(data, 32); + treeType = BigEndian.getInt16(data, 36); + keyCompareType = BigEndian.getInt16(data, 37); + attributes = BigEndian.getInt32(data, 39); } - public final int getTreeDepth() { - return BigEndian.getInt16(data, 0); + public byte[] getBytes() { + byte[] data = new byte[BT_HEADER_RECORD_LENGTH]; + BigEndian.setInt16(data, 0, treeDepth); + BigEndian.setInt32(data, 2, rootNode); + BigEndian.setInt32(data, 6, leafRecords); + BigEndian.setInt32(data, 10, firstLeafNode); + BigEndian.setInt32(data, 14, lastLeafNode); + BigEndian.setInt16(data, 18, nodeSize); + BigEndian.setInt16(data, 20, maxKeyLength); + BigEndian.setInt32(data, 22, totalNodes); + BigEndian.setInt32(data, 26, freeNodes); + BigEndian.setInt32(data, 32, clumpSize); + BigEndian.setInt8(data, 36, treeType); + BigEndian.setInt8(data, 38, keyCompareType); + BigEndian.setInt32(data, 39, attributes); + return data; } - public void setTreeDepth(int depth) { - BigEndian.setInt16(data, 0, depth); + public final String toString() { + return ("Root node: " + getRootNode() + "\n" + "First leaf: " + getFirstLeafNode() + "\n" + + "Last leaf: " + getLastLeafNode() + "\n" + "node size: " + getNodeSize() + "\n"); } - public final int getRootNode() { - return BigEndian.getInt32(data, 2); + public int getTreeDepth() { + return treeDepth; } - public void setRootNode(int node) { - BigEndian.setInt32(data, 2, node); + public int getRootNode() { + return rootNode; } - public final int getLeafRecords() { - return BigEndian.getInt32(data, 6); + public int getLeafRecords() { + return leafRecords; } - public void setLeafRecords(int count) { - BigEndian.setInt32(data, 6, count); + public int getFirstLeafNode() { + return firstLeafNode; } - public final int getFirstLeafNode() { - return BigEndian.getInt32(data, 10); + public int getLastLeafNode() { + return lastLeafNode; } - public void settFirstLeafNode(int node) { - BigEndian.setInt32(data, 10, node); + public int getNodeSize() { + return nodeSize; } - public final int getLastLeafNode() { - return BigEndian.getInt32(data, 14); - } - - public void setLastLeafNode(int node) { - BigEndian.setInt32(data, 14, node); - } - - public final int getNodeSize() { - return BigEndian.getInt16(data, 18); - } - - public void setNodeSize(int size) { - BigEndian.setInt16(data, 18, size); - } - public int getMaxKeyLength() { - return BigEndian.getInt16(data, 20); + return maxKeyLength; } - public void setMaxKeyLength(int length) { - BigEndian.setInt16(data, 20, length); - } - public int getTotalNodes() { - return BigEndian.getInt32(data, 22); + return totalNodes; } - public void setTotalNodes(int count) { - BigEndian.setInt32(data, 22, count); - } - public int getFreeNodes() { - return BigEndian.getInt32(data, 26); + return freeNodes; } - public void setFreeNodes(int count) { - BigEndian.setInt32(data, 26, count); - } - public int getClumpSize() { - return BigEndian.getInt32(data, 32); + return clumpSize; } - public void setClumpSize(int size) { - BigEndian.setInt32(data, 32, size); - } - public int getTreeType() { - return BigEndian.getInt8(data, 36); + return treeType; } - public void setTreeType(int type) { - BigEndian.setInt8(data, 36, type); - } - public int getKeyCompareType() { - return BigEndian.getInt8(data, 37); + return keyCompareType; } - public void setKeyCompareType(int type) { - BigEndian.setInt8(data, 38, type); - } - public long getAttributes() { - return BigEndian.getInt32(data, 39); + return attributes; } - - public void setAttributes(int attrs) { - BigEndian.setInt32(data, 39, attrs); - } - - public byte[] getBytes() { - return data; - } - - public final String toString() { - return ("Root node: " + getRootNode() + "\n" + "First leaf: " - + getFirstLeafNode() + "\n" + "Last leaf: " - + getLastLeafNode() + "\n" + "node size: " + getNodeSize() + "\n"); - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |