mirror of
				https://github.com/TomHarte/CLK.git
				synced 2025-11-04 00:16:26 +00:00 
			
		
		
		
	For everything except the Vic-20, anyway. That has a somewhat outdated notion of what an options panel should be, corresponding to the work yet to do on its analyser.
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
//  TypedDynamicMachine.hpp
 | 
						|
//  Clock Signal
 | 
						|
//
 | 
						|
//  Created by Thomas Harte on 24/11/2017.
 | 
						|
//  Copyright © 2017 Thomas Harte. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#ifndef TypedDynamicMachine_h
 | 
						|
#define TypedDynamicMachine_h
 | 
						|
 | 
						|
#include "MachineForTarget.hpp"
 | 
						|
 | 
						|
namespace Machine {
 | 
						|
 | 
						|
template<typename T> class TypedDynamicMachine: public ::Machine::DynamicMachine {
 | 
						|
	public:
 | 
						|
		TypedDynamicMachine(T *machine) : machine_(machine) {}
 | 
						|
		T *get() { return machine_.get(); }
 | 
						|
 | 
						|
		TypedDynamicMachine() : TypedDynamicMachine(nullptr) {}
 | 
						|
		TypedDynamicMachine(TypedDynamicMachine &&rhs) : machine_(std::move(rhs.machine_)) {}
 | 
						|
		TypedDynamicMachine &operator=(TypedDynamicMachine &&rhs) {
 | 
						|
			machine_ = std::move(rhs.machine_);
 | 
						|
			return *this;
 | 
						|
		}
 | 
						|
 | 
						|
		ConfigurationTarget::Machine *configuration_target() override {
 | 
						|
			return get<ConfigurationTarget::Machine>();
 | 
						|
		}
 | 
						|
 | 
						|
		CRTMachine::Machine *crt_machine() override {
 | 
						|
			return get<CRTMachine::Machine>();
 | 
						|
		}
 | 
						|
 | 
						|
		JoystickMachine::Machine *joystick_machine() override {
 | 
						|
			return get<JoystickMachine::Machine>();
 | 
						|
		}
 | 
						|
 | 
						|
		KeyboardMachine::Machine *keyboard_machine() override {
 | 
						|
			return get<KeyboardMachine::Machine>();
 | 
						|
		}
 | 
						|
 | 
						|
		Configurable::Device *configurable_device() override {
 | 
						|
			return get<Configurable::Device>();
 | 
						|
		}
 | 
						|
 | 
						|
		void *raw_pointer() override {
 | 
						|
			return get();
 | 
						|
		}
 | 
						|
 | 
						|
	private:
 | 
						|
		template <typename Class> Class *get() {
 | 
						|
			return dynamic_cast<Class *>(machine_.get());
 | 
						|
		}
 | 
						|
		std::unique_ptr<T> machine_;
 | 
						|
};
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif /* TypedDynamicMachine_h */
 |