summaryrefslogblamecommitdiffstatshomepage
path: root/src/emu/config.h
blob: 4d3dd4f3b75c1454c52e3fa6888f0fd7486dc63b (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                                 




                                                                            
 

                                                                            

                         
 
            
 
              
                 


                      
 
                            
 
                                                                 

                                                       
                                                  
                                                               
  
 







                             
 
 

                           
       




                                                                                                       

                                                        
                                 
 

                                                                                                
                             

                             
        
                             
         

                                   

          




                                                                                                                    
                                                              
 


                                                                                                                 
                         

                                                              

                                                             
  
 
                           
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria, Aaron Giles
/***************************************************************************

    config.h

    Wrappers for handling MAME configuration files

***************************************************************************/

#ifndef MAME_EMU_CONFIG_H
#define MAME_EMU_CONFIG_H

#pragma once

#include <map>
#include <memory>
#include <string>
#include <string_view>


enum class config_type : int
{
	INIT,           // opportunity to initialize things first
	CONTROLLER,     // loading from controller file
	DEFAULT,        // loading from default.cfg
	SYSTEM,         // loading from system.cfg
	FINAL           // opportunity to finish initialization
};

enum class config_level : int
{
	DEFAULT,
	SOURCE,
	BIOS,
	PARENT,
	SYSTEM
};


class configuration_manager
{
public:
	typedef delegate<void (config_type, config_level, util::xml::data_node const *)> load_delegate;
	typedef delegate<void (config_type, util::xml::data_node *)> save_delegate;

	static inline constexpr int CONFIG_VERSION = 10;

	// construction/destruction
	configuration_manager(running_machine &machine);
	~configuration_manager();

	void config_register(std::string_view name, load_delegate &&load, save_delegate &&save);

	bool load_settings();
	void save_settings();

private:
	struct config_handler
	{
		load_delegate load;
		save_delegate save;
	};

	running_machine &machine() const { return m_machine; }

	bool attempt_load(game_driver const &system, emu_file &file, std::string_view name, config_type which_type);

	bool load_xml(game_driver const &system, emu_file &file, config_type which_type);
	bool save_xml(emu_file &file, config_type which_type);

	void save_unhandled(std::unique_ptr<util::xml::file> &unhandled, util::xml::data_node const &systemnode);
	void restore_unhandled(util::xml::file const &unhandled, util::xml::data_node &systemnode);

	// internal state
	running_machine &m_machine;
	std::multimap<std::string, config_handler> m_typelist;
	std::unique_ptr<util::xml::file> m_unhandled_default;
	std::unique_ptr<util::xml::file> m_unhandled_system;
};

#endif // MAME_EMU_CONFIG_H