package disruptor

type Writer struct {
	previous      int64
	gate          int64
	capacity      int64
	writerCursor  *Cursor
	readerBarrier Barrier
}

func NewWriter(writerCursor *Cursor, capacity int64, readerBarrier Barrier) *Writer {
	assertPowerOfTwo(capacity)

	return &Writer{
		previous:      InitialSequenceValue,
		gate:          InitialSequenceValue,
		capacity:      capacity,
		writerCursor:  writerCursor,
		readerBarrier: readerBarrier,
	}
}

func assertPowerOfTwo(value int64) {
	if value > 0 && (value&(value-1)) != 0 {
		// http://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two
		panic("The ring capacity must be a power of two, e.g. 2, 4, 8, 16, 32, 64, etc.")
	}
}

func (this *Writer) Reserve(count int64) (int64, int64) {
	upper := this.previous + count
	wrap := upper - this.capacity

	if wrap > this.gate {
		min := this.readerBarrier.LoadBarrier(0)
		if wrap > min {
			return InitialSequenceValue, Gating
		}

		this.gate = min
	}

	this.previous = upper
	return upper - count + 1, upper
}
