package org.eclipse.nebula.widgets.nattable.core.layer.axis

import java.math.BigDecimal

import static extension org.eclipse.nebula.widgets.nattable.core.math.BigDecimalExtensions.*

/**
 * A set of useful utility functions that calculate invariants that must hold for any Axis.
 */
class AxisInvariants {
	
	def static getPixelSize(Axis axis) {
		axis.getStartPixelOfSegmentPosition(axis.segmentCount) - axis.getStartPixelOfSegmentPosition(0)
	}
	
	def static getPixelSizeOfSegmentPosition(Axis axis, long segmentPosition) {
		axis.getStartPixelOfSegmentPosition(segmentPosition + 1) - axis.getStartPixelOfSegmentPosition(segmentPosition)
	}
	
	def static boolean containsPixelLocation(Axis axis, BigDecimal pixelLocation) {
		pixelLocation >= BigDecimal::ZERO && pixelLocation < axis.getStartPixelOfSegmentPosition(axis.segmentCount)
	}
	
	def static boolean containsSegmentPosition(Axis axis, long segmentPosition) {
		segmentPosition >= 0 && segmentPosition < axis.segmentCount
	}

}