blob: 184ee4b8818d81678ca87f85331838af61b9a4a2 [file] [log] [blame]
package de.ids_mannheim.korap.query.spans;
import java.nio.ByteBuffer;
import de.ids_mannheim.korap.query.spans.KorapSpan;
// TODO: Store payloads in 12 byte instead of the complicated ByteBuffer stuff!
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class KorapTermSpan extends KorapSpan {
public ByteBuffer payload;
public boolean isPayloadRead = false;
private final Logger log = LoggerFactory.getLogger(ElementSpans.class);
// This advices the java compiler to ignore all loggings
public static final boolean DEBUG = false;
@Override
public Object clone() {
KorapTermSpan span = new KorapTermSpan();
span.start = this.start;
span.end = this.end;
span.doc = this.doc;
span.isPayloadRead = this.isPayloadRead;
span.elementRef = this.elementRef;
if (this.payload != null) {
this.payload.rewind();
span.payload.put(this.payload);
if (DEBUG) {
log.trace("[TS] Clone payload {} to payload {} ...",
this.payload.toString(),
span.payload.toString());
log.trace("[TS] ... from {}-{} to {}-{}",
this.startChar(),
this.endChar(),
span.startChar(),
span.endChar());
};
};
return span;
};
public KorapSpan copyFrom (KorapTermSpan o) {
this.start = o.start;
this.end = o.end;
this.doc = o.doc;
this.payload.rewind();
this.payload.put(o.payload.array());
return this;
};
public KorapSpan shallowCopyFrom (KorapTermSpan o) {
this.start = o.start;
this.end = o.end;
this.doc = o.doc;
this.payload = o.payload;
return this;
};
@Override
public void clearPayload () {
if (this.payload != null) {
this.payload.clear();
// this.payload.rewind();
};
};
@Override
public void initPayload () {
this.payload = ByteBuffer.allocate(128);
};
@Override
public String toString () {
StringBuilder sb = new StringBuilder("[");
return sb.append(this.start).append('-')
.append(this.end)
.append("#")
.append(this.startChar()).append('-').append(this.endChar())
.append('(').append(this.doc).append(')')
.append('$').append(this.payload.toString())
.append(']')
.toString();
};
public int startChar () {
return this.payload.getInt(0);
};
public int endChar () {
return this.payload.getInt(4);
};
public short elementRef(){
return this.payload.getShort(8);
}
public void reset () {
this.clearPayload();
this.start = -1;
this.end = -1;
this.doc = -1;
this.isPayloadRead = false;
};
};