/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#ifndef _lucene_index_Payload_
#define _lucene_index_Payload_
#include "CLucene/util/Array.h"
CL_NS_DEF(index)
/**
* A Payload is metadata that can be stored together with each occurrence
* of a term. This metadata is stored inline in the posting list of the
* specific term.
*
* To store payloads in the index a {@link TokenStream} has to be used that
* produces {@link Token}s containing payload data.
*
* Use {@link TermPositions#getPayloadLength()} and {@link TermPositions#getPayload(byte[], int)}
* to retrieve the payloads from the index.
*
*/
class CLUCENE_EXPORT Payload:LUCENE_REFBASE {
protected:
CL_NS(util)::ValueArray& data;
/** the offset within the byte array */
int32_t offset;
/** the length of the payload data */
int32_t _length;
bool deleteData;
bool deleteArray;
public:
/** Creates an empty payload and does not allocate a byte array. */
Payload();
/**
* Creates a new payload with the the given array as data.
* A reference to the passed-in array is held, i. e. no
* copy is made.
*
* @param data the data of this payload
* @param length the length of the data
* @param deleteData delete data when payload is deleted
*/
Payload(uint8_t* data, const int32_t length, bool deleteData=false);
/**
* Creates a new payload with the the given array as data.
* A reference to the passed-in array is held, i. e. no
* copy is made.
*
* @param data the data of this payload
* @param deleteData delete data when payload is deleted
*/
Payload(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false);
/* Desctructor - auto-delete the data container */
~Payload();
/**
* Sets this payloads data.
* A reference to the passed-in array is held, i. e. no
* copy is made.
* @param deleteData delete data when payload is deleted
*/
void setData(uint8_t* data, const int32_t length, bool deleteData=false);
/**
* Sets this payloads data.
* A reference to the passed-in array is held, i. e. no
* copy is made.
* @param deleteData delete data when payload is deleted
*/
void setData(CL_NS(util)::ValueArray& data, const int32_t offset=0, const int32_t length=-1, bool deleteData=false);
/**
* Returns a reference to the underlying byte array
* that holds this payloads data.
*/
const CL_NS(util)::ValueArray& getData() const;
/**
* Returns the length of the payload data.
*/
int32_t length() const;
/**
* Returns the offset in the underlying byte array
*/
int32_t getOffset() const;
/**
* Returns the byte at the given index.
*/
uint8_t byteAt(int index) const;
/**
* Allocates a new byte array, copies the payload data into it and returns it. Caller is responsible
* for deleting it later.
* @memory caller is responsible for deleting the returned array
*/
CL_NS(util)::ValueArray* toByteArray() const;
/**
* Copies the payload data to a byte array.
*
* @param target the target byte array
* @param targetOffset the offset in the target byte array
*/
void copyTo(uint8_t* target, const int32_t targetLen) const;
/**
* Clones this payload by creating a copy of the underlying
* byte array.
*/
Payload* clone() const;
};
CL_NS_END
#endif