#pragma once
#include "db/dbformat.h"
#include "rocksdb/types.h"
namespace ROCKSDB_NAMESPACE {
class ReadCallback {
public:
explicit ReadCallback(SequenceNumber last_visible_seq)
: max_visible_seq_(last_visible_seq) {}
ReadCallback(SequenceNumber last_visible_seq, SequenceNumber min_uncommitted)
: max_visible_seq_(last_visible_seq), min_uncommitted_(min_uncommitted) {}
virtual ~ReadCallback() {}
virtual bool IsVisibleFullCheck(SequenceNumber seq) = 0;
inline bool IsVisible(SequenceNumber seq) {
assert(min_uncommitted_ > 0);
assert(min_uncommitted_ >= kMinUnCommittedSeq);
if (seq < min_uncommitted_) { assert(seq <= max_visible_seq_);
return true;
} else if (max_visible_seq_ < seq) {
assert(seq != 0);
return false;
} else {
assert(seq != 0); return IsVisibleFullCheck(seq);
}
}
inline SequenceNumber max_visible_seq() { return max_visible_seq_; }
virtual void Refresh(SequenceNumber seq) { max_visible_seq_ = seq; }
protected:
SequenceNumber max_visible_seq_ = kMaxSequenceNumber;
const SequenceNumber min_uncommitted_ = kMinUnCommittedSeq;
};
}