/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.dev.store.btree; import java.util.HashMap; /** * A chunk of data, containing one or multiple pages. * <p> * Chunks are page aligned (each page is usually 4096 bytes). * There are at most 67 million (2^26) chunks, * each chunk is at most 2 GB large. * File format: * 1 byte: 'c' * 4 bytes: length * 4 bytes: chunk id (an incrementing number) * 8 bytes: metaRootPos * [ Page ] * */ public class Chunk { /** * The chunk id. */ int id; /** * The start position within the file. */ long start; /** * The length in bytes (may be larger than the actual value). */ long length; /** * The entry count. */ int entryCount; /** * The number of life (non-garbage) objects. */ int liveCount; /** * The garbage collection priority. */ int collectPriority; /** * The position of the meta root. */ long metaRootPos; /** * The version stored in this chunk. */ long version; public Chunk(int id) { this.id = id; } /** * Build a block from the given string. * * @param s the string * @return the block */ public static Chunk fromString(String s) { HashMap<String, String> map = DataUtils.parseMap(s); int id = Integer.parseInt(map.get("id")); Chunk c = new Chunk(id); c.start = Long.parseLong(map.get("start")); c.length = Long.parseLong(map.get("length")); c.entryCount = Integer.parseInt(map.get("entryCount")); c.liveCount = Integer.parseInt(map.get("liveCount")); c.metaRootPos = Long.parseLong(map.get("metaRoot")); c.version = Long.parseLong(map.get("version")); return c; } public int getFillRate() { return entryCount == 0 ? 0 : 100 * liveCount / entryCount; } public int hashCode() { return id; } public boolean equals(Object o) { return o instanceof Chunk && ((Chunk) o).id == id; } public String toString() { return "id:" + id + "," + "start:" + start + "," + "length:" + length + "," + "entryCount:" + entryCount + "," + "liveCount:" + liveCount + "," + "metaRoot:" + metaRootPos + "," + "version:" + version; } }