mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-04 05:31:51 +00:00
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49026 91177308-0d34-0410-b5e6-96231b3b80d8
86 lines
2.8 KiB
C++
86 lines
2.8 KiB
C++
//===- llvm/System/MappedFile.h - MappedFile OS Concept ---------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file declares the llvm::sys::MappedFile class.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_SYSTEM_MAPPEDFILE_H
|
|
#define LLVM_SYSTEM_MAPPEDFILE_H
|
|
|
|
#include "llvm/System/Path.h"
|
|
|
|
namespace llvm {
|
|
namespace sys {
|
|
|
|
/// Forward declare a class used for holding platform specific information
|
|
/// that needs to be
|
|
struct MappedFileInfo;
|
|
|
|
/// This class provides an abstraction for a memory mapped file in the
|
|
/// operating system's filesystem. It provides platform independent operations
|
|
/// for mapping a file into memory for read access.
|
|
class MappedFile {
|
|
sys::PathWithStatus Path; ///< Path to the file.
|
|
void *BasePtr; ///< Pointer to the base memory address
|
|
mutable MappedFileInfo *MapInfo; ///< Platform specific info for the mapping
|
|
|
|
MappedFile& operator=(const MappedFile &that); // DO NOT IMPLEMENT
|
|
MappedFile(const MappedFile &that); // DO NOT IMPLEMENT
|
|
public:
|
|
MappedFile() : BasePtr(0), MapInfo(0) {}
|
|
|
|
/// Destruct a MappedFile and release all memory associated with it.
|
|
~MappedFile() { close(); }
|
|
|
|
public: // Accessors
|
|
|
|
/// This function determines if the file is currently mapped or not.
|
|
bool isMapped() const { return BasePtr != 0; }
|
|
|
|
/// getBase - Returns a const void* pointer to the base address of the file
|
|
/// mapping. This is the memory address of the first byte in the file.
|
|
const void *getBase() const { return BasePtr; }
|
|
|
|
/// This function returns a reference to the sys::Path object kept by the
|
|
/// MappedFile object. This contains the path to the file that is or
|
|
/// will be mapped.
|
|
const sys::PathWithStatus &path() const { return Path; }
|
|
|
|
/// This function returns the number of bytes in the file.
|
|
size_t size() const;
|
|
|
|
public: // Mutators
|
|
|
|
/// Open a file to be mapped and get its size but don't map it yet. Return
|
|
/// true on error.
|
|
bool open(const sys::Path &P, std::string *ErrMsg = 0) {
|
|
Path = P;
|
|
return initialize(ErrMsg);
|
|
}
|
|
|
|
/// unmap - Remove the mapped file from memory.
|
|
void unmap();
|
|
|
|
/// map - Reserve space for the file, map it into memory, and return a
|
|
/// pointer to it. This returns the base memory address of the mapped file
|
|
/// or 0 if an error occurred.
|
|
const void *map(std::string* ErrMsg = 0);
|
|
|
|
void close() { if (MapInfo) terminate(); }
|
|
|
|
private:
|
|
bool initialize(std::string *ErrMsg);
|
|
void terminate();
|
|
};
|
|
} // end namespace sys
|
|
} // end namespace llvm
|
|
|
|
#endif
|