function CircularBuffer( buffer ) {
	var buf;
	var i;
	if ( !(this instanceof CircularBuffer) ) {
		return new CircularBuffer( buffer );
	}
	if ( isPositiveInteger( buffer ) ) {
		buf = [];
		for ( i = 0; i < buffer; i++ ) {
			buf.push( 0.0 ); // initialize with zeros, but could be any value (we're just ensuring a contiguous block of memory)
		}
	} else if ( isCollection( buffer ) ) {
		buf = buffer;
	} else {
		throw new TypeError( format( 'invalid argument. Must provide either a valid buffer size (i.e., a positive integer) or an array-like object which can serve as the underlying buffer. Value: `%s`.', buffer ) );
	}
	this._buffer = arraylike2object( buf );
	this._length = buf.length;
	this._count = 0;
	this._i = -1;
	return this;
}
Circular buffer constructor.

@constructor
@param {(PositiveInteger|Collection)} buffer - buffer size or an array-like object to use as the underlying buffer
@throws {TypeError} must provide either a valid buffer size or an array-like object
@returns {CircularBuffer} circular buffer instance

@example
var b = new CircularBuffer( 3 );

// Fill the buffer...
var v = b.push( 'foo' );
// returns undefined

v = b.push( 'bar' );
// returns undefined

v = b.push( 'beep' );
// returns undefined

// Add another value to the buffer and return the removed element:
v = b.push( 'boop' );
// returns 'foo'