diff options
Diffstat (limited to 'third_party/libwebrtc/webrtc/rtc_base/file.h')
-rw-r--r-- | third_party/libwebrtc/webrtc/rtc_base/file.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/third_party/libwebrtc/webrtc/rtc_base/file.h b/third_party/libwebrtc/webrtc/rtc_base/file.h new file mode 100644 index 0000000000..f87d9ce186 --- /dev/null +++ b/third_party/libwebrtc/webrtc/rtc_base/file.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef RTC_BASE_FILE_H_ +#define RTC_BASE_FILE_H_ + +#include <stdint.h> + +#include <string> + +#include "rtc_base/constructormagic.h" +#include "rtc_base/pathutils.h" +#include "rtc_base/platform_file.h" + +namespace rtc { + +// This class wraps the platform specific APIs for simple file interactions. +// +// The various read and write methods are best effort, i.e. if an underlying +// call does not manage to read/write all the data more calls will be performed, +// until an error is detected or all data is read/written. +class File { + public: + // Wraps the given PlatformFile. This class is then responsible for closing + // the file, which will be done in the destructor if Close is never called. + explicit File(PlatformFile); + // The default constructor produces a closed file. + File(); + ~File(); + + File(File&& other); + File& operator=(File&& other); + + // Open and Create give files with both reading and writing enabled. + static File Open(const std::string& path); + static File Open(Pathname&& path); + static File Open(const Pathname& path); + // If the file already exists it will be overwritten. + static File Create(const std::string& path); + static File Create(Pathname&& path); + static File Create(const Pathname& path); + + // Remove a file in the file system. + static bool Remove(const std::string& path); + static bool Remove(Pathname&& path); + static bool Remove(const Pathname& path); + + size_t Write(const uint8_t* data, size_t length); + size_t Read(uint8_t* buffer, size_t length); + + // The current position in the file after a call to these methods is platform + // dependent (MSVC gives position offset+length, most other + // compilers/platforms do not alter the position), i.e. do not depend on it, + // do a Seek before any subsequent Read/Write. + size_t WriteAt(const uint8_t* data, size_t length, size_t offset); + size_t ReadAt(uint8_t* buffer, size_t length, size_t offset); + + // Attempt to position the file at the given offset from the start. + // Returns true if successful, false otherwise. + bool Seek(size_t offset); + + // Attempt to close the file. Returns true if successful, false otherwise, + // most notably when the file is already closed. + bool Close(); + + bool IsOpen(); + + private: + PlatformFile file_; + RTC_DISALLOW_COPY_AND_ASSIGN(File); +}; + +} // namespace rtc + +#endif // RTC_BASE_FILE_H_ |