//===--- MemoryBuffer.h - Memory Buffer Interface ---------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file defines the MemoryBuffer interface. // //===----------------------------------------------------------------------===// #ifndef LLVM_SUPPORT_MEMORYBUFFER_H #define LLVM_SUPPORT_MEMORYBUFFER_H #include "llvm-c/Types.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/StringRef.h" #include "llvm/ADT/Twine.h" #include "llvm/Support/Alignment.h" #include "llvm/Support/CBindingWrapping.h" #include "llvm/Support/ErrorOr.h" #include "llvm/Support/MemoryBufferRef.h" #include <cstddef> #include <cstdint> #include <memory> namespace llvm { namespace sys { namespace fs { // Duplicated from FileSystem.h to avoid a dependency. #if defined(_WIN32) // A Win32 HANDLE is a typedef of void* using file_t = void *; #else file_t; #endif } // namespace fs } // namespace sys /// This interface provides simple read-only access to a block of memory, and /// provides simple methods for reading files and standard input into a memory /// buffer. In addition to basic access to the characters in the file, this /// interface guarantees you can read one character past the end of the file, /// and that this character will read as '\0'. /// /// The '\0' guarantee is needed to support an optimization -- it's intended to /// be more efficient for clients which are reading all the data to stop /// reading when they encounter a '\0' than to continually check the file /// position to see if it has reached the end of the file. class MemoryBuffer { … }; /// This class is an extension of MemoryBuffer, which allows copy-on-write /// access to the underlying contents. It only supports creation methods that /// are guaranteed to produce a writable buffer. For example, mapping a file /// read-only is not supported. class WritableMemoryBuffer : public MemoryBuffer { … }; /// This class is an extension of MemoryBuffer, which allows write access to /// the underlying contents and committing those changes to the original source. /// It only supports creation methods that are guaranteed to produce a writable /// buffer. For example, mapping a file read-only is not supported. class WriteThroughMemoryBuffer : public MemoryBuffer { … }; // Create wrappers for C Binding types (see CBindingWrapping.h). DEFINE_SIMPLE_CONVERSION_FUNCTIONS(…) } // end namespace llvm #endif // LLVM_SUPPORT_MEMORYBUFFER_H