/* * eXist Open Source Native XML Database * Copyright (C) 2001-06 Wolfgang M. Meier * wolfgang@exist-db.org * http://exist.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * $Id$ */ package org.exist.storage.dom; /** * Provides static methods to set or test the status bits of a record identifier * in the dom.dbx persistent DOM store. * * @see org.exist.storage.dom.DOMFile * @author wolf */ class ItemId { public static final short RELOCATED_MASK = (short) 0x8000; public static final short LINK_MASK = (short) 0x4000; public static final short ID_MASK = (short) 0x3FFF; public static final short LINK_OR_RELOCATED_MASK = (short) 0xC000; public static final byte LINK_FLAG = (byte) 0x1; public static final byte RELOCATED_FLAG = (byte) 0x2; public static final short UNKNOWN_ID = (short)-1; public static final short MAX_ID = (short)0x3FFE; public static final short DEFRAG_LIMIT = (short)0x2FFE; public final static byte getFlags(short id) { return (byte)((id & LINK_OR_RELOCATED_MASK) >>> 14); } public final static short getId(short id) { return (short) (id & ID_MASK); } public final static boolean matches(short id, short targetId) { return ((short)(id & ID_MASK)) == targetId; } public final static short setIsRelocated(short id) { return (short)(id | RELOCATED_MASK); } public final static boolean isLink(short id) { return (id & LINK_MASK) == LINK_MASK; } public final static short setIsLink(short id) { return (short) (id | LINK_MASK); } public final static boolean isRelocated(short id) { return (id & RELOCATED_MASK) == RELOCATED_MASK; } public final static boolean isLinkOrRelocated(short id) { return (id & LINK_OR_RELOCATED_MASK) != 0; } public final static boolean isOrdinaryRecord(short id) { return (id & LINK_OR_RELOCATED_MASK) == 0; } }