All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.rawstore.IAddressManager Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on Sep 4, 2007
 */

package com.bigdata.rawstore;


/**
 * An interface that encapsulates operations on opaque identifiers used to
 * locate data within an {@link IRawStore}.
 *       
 * @author Bryan Thompson
 * @version $Id$
 */
public interface IAddressManager {

    /**
     * A null reference (0L).
     * 

* Note: It is a requirement that all implementations understand the value * 0L as a null reference. */ public static final long NULL = 0L; /** * Converts a byte count and offset into a long integer. * * @param nbytes * The byte count. * @param offset * The byte offset. * * @return The long integer. * * @exception IllegalArgumentException * if the byte count is larger than can be represented by the * address manager. * * @exception IllegalArgumentException * if the byte offset is larger than can be represented by * the address manager. */ public long toAddr(int nbytes,long offset); /** * The offset on the store at which the datum is stored. While this is often * the offset of a byte into a file on disk, implementations MAY assign * offsets using other strategies. * * @param addr * The opaque identifier that is the within store locator for * some datum. * * @return The offset of that datum. */ public long getOffset(long addr); /** * The length of the datum in bytes. This must be the actual length of the * record on the disk, not the length of the caller's byte[]. This is * necessary in order to support transparent checksums and/or compression * for records in the {@link IRawStore}. * * @param addr * The opaque identifier that is the within store locator for * some datum. * * @return The offset of that datum. */ public int getByteCount(long addr); // /** // * Pack the address onto the output stream. // * // * @param out // * The output stream. // * // * @param addr // * The opaque identifier that is the within store locator for // * some datum. // * // * @deprecated Address packing is not currently used by anything. While it // * can produce somewhat more compact representations, it is // * problematic in that it requires an awareness of the // * {@link IAddressManager} at the point in the code where the // * address is to be decoded. This is not always feasible and // * other techniques are available to code the addresses more // * efficiently, for example, the child addresses of a // * {@link Node}. // */ // public void packAddr(DataOutput out, long addr) throws IOException; // // /** // * Unpack the address from the input stream. // * // * @param in // * The input stream. // * // * @return The opaque identifier that is the within store locator for some // * datum. // * // * @deprecated Address packing is not currently used by anything. While it // * can produce somewhat more compact representations, it is // * problematic in that it requires an awareness of the // * {@link IAddressManager} at the point in the code where the // * address is to be decoded. This is not always feasible and // * other techniques are available to code the addresses more // * efficiently, for example, the child addresses of a // * {@link Node}. // */ // public long unpackAddr(DataInput in) throws IOException; /** * A human readable representation of the address. * * @param addr * The opaque identifier that is the within store locator for * some datum. * * @return A human readable representation. */ public String toString(long addr); /** * Determine the unencoded physical address * * @param addr * The encoded address * * @return an unencoded address offset */ public long getPhysicalAddress(long addr); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy