| Index: webrtc/base/file.h | 
| diff --git a/webrtc/base/file.h b/webrtc/base/file.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..3401c28abe5e96be580f3981e3e6730257716d46 | 
| --- /dev/null | 
| +++ b/webrtc/base/file.h | 
| @@ -0,0 +1,67 @@ | 
| +/* | 
| + *  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 WEBRTC_BASE_FILE_H_ | 
| +#define WEBRTC_BASE_FILE_H_ | 
| + | 
| +#include <stdint.h> | 
| + | 
| +#include <string> | 
| + | 
| +#include "webrtc/base/platform_file.h" | 
| +#include "webrtc/base/constructormagic.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); | 
| +  ~File(); | 
| + | 
| +  File(File&& other); | 
| +  File& operator=(File&& other); | 
| + | 
| +  static File Open(const std::string& 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  // WEBRTC_BASE_FILE_H_ | 
|  |