Factor a `FileReader` base class out of `DiskInterface`
authorBrad King <brad.king@kitware.com>
Wed, 3 Feb 2016 18:18:37 +0000 (13:18 -0500)
committerBrad King <brad.king@kitware.com>
Wed, 3 Feb 2016 18:19:42 +0000 (13:19 -0500)
Some clients will need only the ability to read files, so provide this
as a more narrow interface than the full disk interface.

src/disk_interface.h

index b61d192..94f25dc 100644 (file)
@@ -21,13 +21,20 @@ using namespace std;
 
 #include "timestamp.h"
 
+/// Interface for reading files from disk.  See DiskInterface for details.
+/// This base offers the minimum interface needed just to read files.
+struct FileReader {
+  virtual ~FileReader() {}
+
+  /// Read a file to a string.  Fill in |err| on error.
+  virtual string ReadFile(const string& path, string* err) = 0;
+};
+
 /// Interface for accessing the disk.
 ///
 /// Abstract so it can be mocked out for tests.  The real implementation
 /// is RealDiskInterface.
-struct DiskInterface {
-  virtual ~DiskInterface() {}
-
+struct DiskInterface: public FileReader {
   /// stat() a file, returning the mtime, or 0 if missing and -1 on
   /// other errors.
   virtual TimeStamp Stat(const string& path, string* err) const = 0;
@@ -39,9 +46,6 @@ struct DiskInterface {
   /// Returns true on success, false on failure
   virtual bool WriteFile(const string& path, const string& contents) = 0;
 
-  /// Read a file to a string.  Fill in |err| on error.
-  virtual string ReadFile(const string& path, string* err) = 0;
-
   /// Remove the file named @a path. It behaves like 'rm -f path' so no errors
   /// are reported if it does not exists.
   /// @returns 0 if the file has been removed,