summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/corefile.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/corefile.h')
-rw-r--r--src/lib/util/corefile.h94
1 files changed, 14 insertions, 80 deletions
diff --git a/src/lib/util/corefile.h b/src/lib/util/corefile.h
index d286cb866ac..fda5015d8ba 100644
--- a/src/lib/util/corefile.h
+++ b/src/lib/util/corefile.h
@@ -12,14 +12,14 @@
#pragma once
-
-#include "corestr.h"
-#include "coretmpl.h"
+#include "ioprocs.h"
+#include "osdfile.h"
#include "strformat.h"
#include <cstdint>
#include <memory>
-#include <string>
+#include <string_view>
+#include <system_error>
namespace util {
@@ -30,17 +30,12 @@ namespace util {
#define OPEN_FLAG_NO_BOM 0x0100 /* don't output BOM */
-#define FCOMPRESS_NONE 0 /* no compression */
-#define FCOMPRESS_MIN 1 /* minimal compression */
-#define FCOMPRESS_MEDIUM 6 /* standard compression */
-#define FCOMPRESS_MAX 9 /* maximum compression */
-
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
-class core_file
+class core_file : public random_read_write
{
public:
typedef std::unique_ptr<core_file> ptr;
@@ -49,44 +44,29 @@ public:
// ----- file open/close -----
// open a file with the specified filename
- static osd_file::error open(std::string const &filename, std::uint32_t openflags, ptr &file);
+ static std::error_condition open(std::string_view filename, std::uint32_t openflags, ptr &file) noexcept;
// open a RAM-based "file" using the given data and length (read-only)
- static osd_file::error open_ram(const void *data, std::size_t length, std::uint32_t openflags, ptr &file);
+ static std::error_condition open_ram(const void *data, std::size_t length, std::uint32_t openflags, ptr &file) noexcept;
// open a RAM-based "file" using the given data and length (read-only), copying the data
- static osd_file::error open_ram_copy(const void *data, std::size_t length, std::uint32_t openflags, ptr &file);
+ static std::error_condition open_ram_copy(const void *data, std::size_t length, std::uint32_t openflags, ptr &file) noexcept;
// open a proxy "file" that forwards requests to another file object
- static osd_file::error open_proxy(core_file &file, ptr &proxy);
+ static std::error_condition open_proxy(core_file &file, ptr &proxy) noexcept;
// close an open file
virtual ~core_file();
- // enable/disable streaming file compression via zlib; level is 0 to disable compression, or up to 9 for max compression
- virtual osd_file::error compress(int level) = 0;
-
// ----- file positioning -----
- // adjust the file pointer within the file
- virtual int seek(std::int64_t offset, int whence) = 0;
-
- // return the current file pointer
- virtual std::uint64_t tell() const = 0;
-
// return true if we are at the EOF
virtual bool eof() const = 0;
- // return the total size of the file
- virtual std::uint64_t size() const = 0;
-
// ----- file read -----
- // standard binary read from a file
- virtual std::uint32_t read(void *buffer, std::uint32_t length) = 0;
-
// read one character from the file
virtual int getc() = 0;
@@ -96,74 +76,28 @@ public:
// read a full line of text from the file
virtual char *gets(char *s, int n) = 0;
- // get a pointer to a buffer that holds the full file data in RAM
- // this function may cause the full file data to be read
- virtual const void *buffer() = 0;
-
// open a file with the specified filename, read it into memory, and return a pointer
- static osd_file::error load(std::string const &filename, void **data, std::uint32_t &length);
- static osd_file::error load(std::string const &filename, std::vector<uint8_t> &data);
+ static std::error_condition load(std::string_view filename, void **data, std::size_t &length) noexcept;
+ static std::error_condition load(std::string_view filename, std::vector<uint8_t> &data) noexcept;
// ----- file write -----
- // standard binary write to a file
- virtual std::uint32_t write(const void *buffer, std::uint32_t length) = 0;
-
// write a line of text to the file
- virtual int puts(const char *s) = 0;
+ virtual int puts(std::string_view s) = 0;
// printf-style text write to a file
- virtual int vprintf(util::format_argument_pack<std::ostream> const &args) = 0;
+ virtual int vprintf(util::format_argument_pack<char> const &args) = 0;
template <typename Format, typename... Params> int printf(Format &&fmt, Params &&...args)
{
return vprintf(util::make_format_argument_pack(std::forward<Format>(fmt), std::forward<Params>(args)...));
}
// file truncation
- virtual osd_file::error truncate(std::uint64_t offset) = 0;
-
- // flush file buffers
- virtual osd_file::error flush() = 0;
-
-
-protected:
- core_file();
+ virtual std::error_condition truncate(std::uint64_t offset) = 0;
};
-
-/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
-
-// is a given character a directory separator?
-
-constexpr bool is_directory_separator(char c)
-{
-#if defined(WIN32)
- return ('\\' == c) || ('/' == c) || (':' == c);
-#else
- return '/' == c;
-#endif
-}
-
} // namespace util
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-/* ----- filename utilities ----- */
-
-// extract the base part of a filename (remove extensions and paths)
-std::string core_filename_extract_base(const std::string &name, bool strip_extension = false);
-
-// extracts the file extension from a filename
-std::string core_filename_extract_extension(const std::string &filename, bool strip_period = false);
-
-// true if the given filename ends with a particular extension
-bool core_filename_ends_with(const std::string &filename, const std::string &extension);
-
-
#endif // MAME_LIB_UTIL_COREFILE_H