package io.teknek.nibiru.engine;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.concurrent.atomic.AtomicLong;
import io.teknek.nibiru.Store;
import io.teknek.nibiru.TimeSource;
import io.teknek.nibiru.TimeSourceImpl;
import io.teknek.nibiru.Token;
import io.teknek.nibiru.engine.atom.AtomKey;
import io.teknek.nibiru.engine.atom.AtomValue;
public abstract class AbstractMemtable implements Comparable<AbstractMemtable>{
private static AtomicLong MEMTABLE_ID = new AtomicLong();
protected CommitLog commitLog;
protected Store store;
protected final long myId;
protected TimeSource timeSource;
public AbstractMemtable(Store columnFamily, CommitLog commitLog){
this.commitLog = commitLog;
this.store = columnFamily;
myId = MEMTABLE_ID.getAndIncrement();
timeSource = new TimeSourceImpl();
}
public abstract int size();
public abstract void put(Token rowkey, String column, String value, long stamp, long ttl) ;
public abstract AtomValue get(Token row, String column);
public abstract SortedMap<AtomKey,AtomValue> slice(Token rowkey, String start, String end);
public abstract void delete(Token row, long time);
public abstract void delete(Token rowkey, String column, long time);
public abstract Iterator<MemtablePair<Token, Map<AtomKey,Iterator<AtomValue>>>> getDataIterator();
@Override
public int compareTo(AbstractMemtable o) {
if (o == this){
return 0;
}
if (this.myId == o.myId){
return 0;
} else if (this.myId < o.myId){
return -1;
} else {
return 1;
}
}
public CommitLog getCommitLog() {
return commitLog;
}
//VisibileForTesting
public TimeSource getTimeSource() {
return timeSource;
}
//VisibileForTesting
public void setTimeSource(TimeSource timeSource) {
this.timeSource = timeSource;
}
}