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

📄 indexinfoblock.java

📁 一个用java编写的从底层开始设计的小型数据库管理系统
💻 JAVA
字号:
/*
 * Created on 2005-3-18
 *
 */
package buffer;

import diskaccess.DiskManagement;

/**
 * @author zh
 */
public class IndexInfoBlock extends Block{
    private static final int TREE_LEVEL_OFFSET = 0;
    private static final int ROOT_ID_OFFSET = 4;
    
    /**
     * 从0开始,根节点为0层
     */
    private int level;

    private int root;
    
    IndexInfoBlock(byte[] buffer, IDEntry id) {
        super(buffer, id);
    }
    
    /**
     * @param root 0 用data数据初始化,
     *               否则用外部的root
     */
    public void initialize(int root) {
        if (initialized()) {
            if (root != 0) {
                throw new IllegalArgumentException("new block has an error");
            }
            return;
        }
        
        if (root != 0) {
            setData(null);
            level = 0;
            this.root = root;
            modified = true;
            return;
        }
        
        this.level = getInt(TREE_LEVEL_OFFSET);
        this.root = getInt(ROOT_ID_OFFSET);

        // 不需要如此大的空间了
		setData(null);
    }
    
    public int getLevel() {
        return level;
    }
    
    public int getRoot() {
        return root;
    }
    
    public void plusLevel() {
        level++;
        modified = true;
    }
    
    public void setRoot(int root) {
        this.root = root;
        modified = true;
    }

    protected void releaseMemory(DiskManagement disk) {
        if (modified) {
            int size = ROOT_ID_OFFSET + 4;
            byte[] dt = new byte[size];
            setData(dt);
            
            setInt(TREE_LEVEL_OFFSET, level);
            setInt(ROOT_ID_OFFSET, root);
            
            modified = false;
            super.writeBlock(disk);
        }
    }
    
}

⌨️ 快捷键说明

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