/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jena.tdb.store.nodetable ;
import java.nio.ByteBuffer ;
import org.apache.jena.graph.Node ;
import org.apache.jena.shared.PrefixMapping ;
/** Encode/decode for Nodes into bytes */
public interface Nodec {
/**
* Calculate the maximum number of bytes needed for a Node. This needs to be
* an overestimate and is used to ensure there is space in the bytebuffer
* passed to encode.
*/
public int maxSize(Node node) ;
/**
* Encode the node into the byte buffer, starting at the given offset. The
* ByteBuffer will have position/limit around the space used on return,
* <b>without a length code<b>.
*
* @param node Node to encode.
* @param bb ByteBuffer
* @param pmap Optional prefix mapping. Can be null.
* @return Length of byte buffer used for the whole encoding.
*/
public int encode(Node node, ByteBuffer bb, PrefixMapping pmap) ;
/**
* Decode the node from the byte buffer. The ByteBuffer position should be
* the start of the encoding (no binary length for example)
*
* @param bb ByteBuffer
* @param pmap Optional prefix mapping. Can be null.
* @return the decoded Node.
*/
public Node decode(ByteBuffer bb, PrefixMapping pmap) ;
}