// Copyright (c) 2002 - 2026 kio@little-bat.de
// BSD-2-Clause license
// https://opensource.org/licenses/BSD-2-Clause

#pragma once
#include "Machine.h"
#include "Templates/Array.h"
#include "cpp/cppthreads.h"


namespace zxsp
{

class MachineList : private Array<RCPtr<volatile Machine>>
{
	using Array::cnt;
	using Array::data;
	PLock mutex;

public:
	void lock() volatile { mutex.lock(); }
	void unlock() volatile { mutex.unlock(); }

	void append(RCPtr<volatile Machine> m) { Array::append(m); }
	void remove(RCPtr<volatile Machine> m) { Array::remove(m); }
	void runMachinesForSound(const StereoBuffer audio_in_buffer, StereoBuffer audio_out_buffer);
};


extern volatile MachineList machine_list;

} // namespace zxsp
