Exemplo n.º 1
0
        //virtual ~input_code_poller();


        public virtual void reset()
        {
            // iterate over device classes and devices
            m_axis_memory.clear();
            m_switch_memory.clear();
            for (input_device_class classno = input_device_class.DEVICE_CLASS_FIRST_VALID; input_device_class.DEVICE_CLASS_LAST_VALID >= classno; ++classno)
            {
                input_class devclass = m_manager.device_class(classno);
                if (devclass.enabled())
                {
                    for (int devnum = 0; devclass.maxindex() >= devnum; ++devnum)
                    {
                        // fetch the device; ignore if nullptr
                        input_device device = devclass.device(devnum);
                        if (device != null)
                        {
                            // iterate over items within each device
                            for (input_item_id itemid = input_item_id.ITEM_ID_FIRST_VALID; device.maxitem() >= itemid; ++itemid)
                            {
                                // for any non-switch items, set memory to the current value
                                input_device_item item = device.item(itemid);
                                if (item != null && (item.itemclass() != input_item_class.ITEM_CLASS_SWITCH))
                                {
                                    m_axis_memory.emplace_back(new std.pair <input_device_item, s32>(item, m_manager.code_value(item.code())));
                                }
                            }
                        }
                    }
                }
            }

            m_axis_memory.Sort();  //std::sort(m_axis_memory.begin(), m_axis_memory.end());
        }
Exemplo n.º 2
0
        // register for save states

        /*-------------------------------------------------
        *   register_save - register for save states
        *  -------------------------------------------------*/
        public void register_save()
        {
            assert(m_save_order.empty());
            assert(m_save_data == null);

            // make space for the data
            m_save_order.clear();
            m_save_order.reserve(m_itemtable.size());
            m_save_data = new s32 [m_itemtable.size()];  //m_save_data = std::make_unique<s32 []>(m_itemtable.size());

            // sort existing outputs by name and register for save
            foreach (var item in m_itemtable)
            {
                m_save_order.emplace_back(item.second());
            }
            m_save_order.Sort((l, r) => { return(string.Compare(l.name(), r.name())); });  //std::sort(m_save_order.begin(), m_save_order.end(), [] (auto const &l, auto const &r) { return l.get().name() < r.get().name(); });

            // register the reserved space for saving
            //throw new emu_unimplemented();
#if false
            machine().save().save_pointer(nullptr, "output", nullptr, 0, NAME(m_save_data), m_itemtable.size());
#endif

            if (OUTPUT_VERBOSE)
            {
                osd_printf_verbose("Registered {0} outputs for save states\n", m_itemtable.size());
            }
        }
Exemplo n.º 3
0
        std.vector <KeyValuePair <string, categoryindex> > m_ini_index;  //std::vector<std::pair<std::string, categoryindex> > m_ini_index;


        // construction/destruction
        //-------------------------------------------------
        //  ctor
        //-------------------------------------------------
        public inifile_manager(ui_options moptions)
        {
            m_options   = moptions;
            m_ini_index = new std.vector <KeyValuePair <string, categoryindex> >();


            // scan directories and create index
            file_enumerator path = new file_enumerator(m_options.categoryini_path());

            for (osd.directory.entry dir = path.next(); dir != null; dir = path.next())
            {
                string name = dir.name;
                if (core_filename_ends_with(name, ".ini"))
                {
                    emu_file file = new emu_file(m_options.categoryini_path(), OPEN_FLAG_READ);
                    if (file.open(name) == osd_file.error.NONE)
                    {
                        init_category(name, file);
                        file.close();
                    }
                }
            }

            //std::stable_sort(m_ini_index.begin(), m_ini_index.end());//, [] (auto const &x, auto const &y) { return 0 > core_stricmp(x.first.c_str(), y.first.c_str()); });
            m_ini_index.Sort((x, y) => { return(core_stricmp(x.Key.c_str(), y.Key.c_str())); });
        }
Exemplo n.º 4
0
        //-------------------------------------------------
        //  populate search list
        //-------------------------------------------------
        void populate_search()
        {
            // ensure search list is populated
            if (m_searchlist.empty())
            {
                var sorted = m_persistent_data.sorted_list();
                m_searchlist.reserve(sorted.size());
                foreach (ui_system_info info in sorted)
                {
                    m_searchlist.emplace_back(new std.pair <double, ui_system_info>(1.0, info));
                }
            }

            // keep track of what we matched against
            string ucs_search = ustr_from_utf8(normalize_unicode(m_search, unicode_normalization_form.D, true));  //const std::u32string ucs_search(ustr_from_utf8(normalize_unicode(m_search, unicode_normalization_form::D, true)));

            // check available search data
            if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_SHORTNAME))
            {
                m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_SHORTNAME;
            }
            if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_DESCRIPTION))
            {
                m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_DESCRIPTION;
            }
            if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_MANUF_DESC))
            {
                m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_MANUF_DESC;
            }
            if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_DFLT_DESC))
            {
                m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_DFLT_DESC;
            }
            if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_MANUF_DFLT_DESC))
            {
                m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_MANUF_DFLT_DESC;
            }

            for (int i = 0; i < m_searchlist.Count; i++)  //for (std::pair<double, std::reference_wrapper<ui_system_info const> > &info : m_searchlist)
            {
                var info = m_searchlist[i];

                m_searchlist[i] = std.make_pair(1.0, info.second);
                ui_system_info sys = info.second;

                // match shortnames
                if ((m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_SHORTNAME) != 0)
                {
                    m_searchlist[i] = std.make_pair(util.edit_distance(ucs_search, sys.ucs_shortname), info.second);
                }

                // match reading
                if (info.first != 0 && !sys.ucs_reading_description.empty())
                {
                    m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_reading_description), info.first), info.second);

                    // match "<manufacturer> <reading>"
                    if (info.first != 0)
                    {
                        m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_reading_description), info.first), info.second);
                    }
                }

                // match descriptions
                if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_DESCRIPTION) != 0)
                {
                    m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_description), info.first), info.second);
                }

                // match "<manufacturer> <description>"
                if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_MANUF_DESC) != 0)
                {
                    m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_description), info.first), info.second);
                }

                // match default description
                if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_DFLT_DESC) != 0 && !sys.ucs_default_description.empty())
                {
                    m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_default_description), info.first), info.second);

                    // match "<manufacturer> <default description>"
                    if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_MANUF_DFLT_DESC) != 0)
                    {
                        m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_default_description), info.first), info.second);
                    }
                }
            }

            // sort according to edit distance
            //std::stable_sort(
            //        m_searchlist.begin(),
            //        m_searchlist.end());
            //        [] (auto const &lhs, auto const &rhs) { return lhs.first < rhs.first; });
            m_searchlist.Sort((lhs, rhs) => { return(lhs.first.CompareTo(rhs.first)); });
        }