/* Simple resampler based on bsnes's ruby audio library */

#pragma once

#include "ring_buffer.h"

class Resampler : public ring_buffer
{
public:
	virtual void clear() = 0;
	virtual void time_ratio(double) = 0;
	virtual void read(short *, int) = 0;
	virtual int avail() = 0;

	Resampler(int num_samples) : ring_buffer(num_samples << 1)
	{
	}

	virtual ~Resampler()
	{
	}

	bool push(short *src, int num_samples)
	{
		if (this->max_write() < num_samples)
			return false;

		!num_samples || ring_buffer::push(reinterpret_cast<unsigned char *>(src), num_samples << 1);

		return true;
	}

	int max_write()
	{
		return this->space_empty () >> 1;
	}

	void resize(int num_samples)
	{
		ring_buffer::resize(num_samples << 1);
	}
};