module mutils.container.circular;

struct Circular(T){
	T[] range;
	size_t currElement;

	this(T[] r){
		assert(r.length>0);
		range=r;
	}

	ref T get(){
		return range[currElement];
	}

	ref T popFront(){
		currElement++;
		if(currElement>=range.length){
			currElement=0;
		}
		return get();
	}

	ref T popBack(){
		if(currElement==0){
			currElement=range.length;
		}
		currElement--;
		return get();
	}

}