diff options
Diffstat (limited to 'docs/release/src/frontend/mame/audit.h')
-rw-r--r-- | docs/release/src/frontend/mame/audit.h | 191 |
1 files changed, 101 insertions, 90 deletions
diff --git a/docs/release/src/frontend/mame/audit.h b/docs/release/src/frontend/mame/audit.h index d936951155f..f2a73ae56ac 100644 --- a/docs/release/src/frontend/mame/audit.h +++ b/docs/release/src/frontend/mame/audit.h @@ -10,11 +10,15 @@ #pragma once -#ifndef __AUDIT_H__ -#define __AUDIT_H__ +#ifndef MAME_FRONTEND_AUDIT_H +#define MAME_FRONTEND_AUDIT_H #include "hash.h" +#include <iosfwd> +#include <list> +#include <utility> + //************************************************************************** @@ -35,100 +39,44 @@ // forward declarations class driver_enumerator; -// ======================> audit_record -// holds the result of auditing a single item -class audit_record -{ - friend class simple_list<audit_record>; +// ======================> media_auditor + +// class which manages auditing of items +class media_auditor +{ public: - // media types - enum media_type + enum class media_type { - MEDIA_ROM = 0, - MEDIA_DISK, - MEDIA_SAMPLE + ROM = 0, + DISK, + SAMPLE }; // status values - enum audit_status + enum class audit_status { - STATUS_GOOD = 0, - STATUS_FOUND_INVALID, - STATUS_NOT_FOUND, - STATUS_ERROR + GOOD = 0, + FOUND_INVALID, + NOT_FOUND, + UNVERIFIED = 100 }; // substatus values - enum audit_substatus + enum class audit_substatus { - SUBSTATUS_GOOD = 0, - SUBSTATUS_GOOD_NEEDS_REDUMP, - SUBSTATUS_FOUND_NODUMP, - SUBSTATUS_FOUND_BAD_CHECKSUM, - SUBSTATUS_FOUND_WRONG_LENGTH, - SUBSTATUS_NOT_FOUND, - SUBSTATUS_NOT_FOUND_NODUMP, - SUBSTATUS_NOT_FOUND_OPTIONAL, - SUBSTATUS_ERROR = 100 + GOOD = 0, + GOOD_NEEDS_REDUMP, + FOUND_NODUMP, + FOUND_BAD_CHECKSUM, + FOUND_WRONG_LENGTH, + NOT_FOUND, + NOT_FOUND_NODUMP, + NOT_FOUND_OPTIONAL, + UNVERIFIED = 100 }; - // construction/destruction - audit_record(const rom_entry &media, media_type type); - audit_record(const char *name, media_type type); - - // getters - audit_record *next() const { return m_next; } - media_type type() const { return m_type; } - audit_status status() const { return m_status; } - audit_substatus substatus() const { return m_substatus; } - const char *name() const { return m_name; } - UINT64 expected_length() const { return m_explength; } - UINT64 actual_length() const { return m_length; } - const hash_collection &expected_hashes() const { return m_exphashes; } - const hash_collection &actual_hashes() const { return m_hashes; } - device_t *shared_device() const { return m_shared_device; } - - // setters - void set_status(audit_status status, audit_substatus substatus) - { - m_status = status; - m_substatus = substatus; - } - - void set_actual(const hash_collection &hashes, UINT64 length = 0) - { - m_hashes = hashes; - m_length = length; - } - - void set_shared_device(device_t *shared_device) - { - m_shared_device = shared_device; - } - -private: - // internal state - audit_record * m_next; - media_type m_type; /* type of item that was audited */ - audit_status m_status; /* status of audit on this item */ - audit_substatus m_substatus; /* finer-detail status */ - const char * m_name; /* name of item */ - UINT64 m_explength; /* expected length of item */ - UINT64 m_length; /* actual length of item */ - hash_collection m_exphashes; /* expected hash data */ - hash_collection m_hashes; /* actual hash information */ - device_t * m_shared_device; /* device that shares the rom */ -}; - - -// ======================> media_auditor - -// class which manages auditing of items -class media_auditor -{ -public: // summary values enum summary { @@ -139,33 +87,96 @@ public: NOTFOUND }; + // holds the result of auditing a single item + class audit_record + { + public: + // media types + // construction/destruction + audit_record(const rom_entry &media, media_type type); + audit_record(const char *name, media_type type); + audit_record(const audit_record &) = default; + audit_record(audit_record &&) = default; + audit_record &operator=(const audit_record &) = default; + audit_record &operator=(audit_record &&) = default; + + // getters + media_type type() const { return m_type; } + audit_status status() const { return m_status; } + audit_substatus substatus() const { return m_substatus; } + const char *name() const { return m_name; } + UINT64 expected_length() const { return m_explength; } + UINT64 actual_length() const { return m_length; } + const util::hash_collection &expected_hashes() const { return m_exphashes; } + const util::hash_collection &actual_hashes() const { return m_hashes; } + device_t *shared_device() const { return m_shared_device; } + + // setters + void set_status(audit_status status, audit_substatus substatus) + { + m_status = status; + m_substatus = substatus; + } + + void set_actual(const util::hash_collection &hashes, UINT64 length = 0) + { + m_hashes = hashes; + m_length = length; + } + + void set_actual(util::hash_collection &&hashes, UINT64 length = 0) + { + m_hashes = std::move(hashes); + m_length = length; + } + + void set_shared_device(device_t *shared_device) + { + m_shared_device = shared_device; + } + + private: + // internal state + media_type m_type; // type of item that was audited + audit_status m_status; // status of audit on this item + audit_substatus m_substatus; // finer-detail status + const char * m_name; // name of item + UINT64 m_explength; // expected length of item + UINT64 m_length; // actual length of item + util::hash_collection m_exphashes; // expected hash data + util::hash_collection m_hashes; // actual hash information + device_t * m_shared_device; // device that shares the rom + }; + using record_list = std::list<audit_record>; + // construction/destruction media_auditor(const driver_enumerator &enumerator); // getters - const simple_list<audit_record> &records() const { return m_record_list; } + const record_list &records() const { return m_record_list; } // audit operations summary audit_media(const char *validation = AUDIT_VALIDATE_FULL); summary audit_device(device_t &device, const char *validation = AUDIT_VALIDATE_FULL); - summary audit_software(const char *list_name, software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL); + summary audit_software(const char *list_name, const software_info *swinfo, const char *validation = AUDIT_VALIDATE_FULL); summary audit_samples(); - summary summarize(const char *name,std::string *output = nullptr); + summary summarize(const char *name, std::ostream *output = nullptr) const; summary winui_summarize(const char *name, std::string *output = nullptr); //WINUI - only report problems that the user can fix private: // internal helpers - audit_record *audit_one_rom(const rom_entry *rom); - audit_record *audit_one_disk(const rom_entry *rom, const char *locationtag = nullptr); + void audit_regions(const rom_entry *region, const char *locationtag, std::size_t &found, std::size_t &required); + audit_record &audit_one_rom(const rom_entry *rom); + audit_record &audit_one_disk(const rom_entry *rom, const char *locationtag); void compute_status(audit_record &record, const rom_entry *rom, bool found); - device_t *find_shared_device(device_t &device, const char *name, const hash_collection &romhashes, UINT64 romlength); + device_t *find_shared_device(device_t &device, const char *name, const util::hash_collection &romhashes, UINT64 romlength); // internal state - simple_list<audit_record> m_record_list; + record_list m_record_list; const driver_enumerator & m_enumerator; const char * m_validation; const char * m_searchpath; }; -#endif /* __AUDIT_H__ */ +#endif // MAME_FRONTEND_AUDIT_H |