llvm-6502/include/llvm/System/MappedFile.h

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