Home | History | Annotate | Download | only in drive
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_
      6 #define CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_
      7 
      8 #include <set>
      9 
     10 #include "base/files/file_path.h"
     11 
     12 namespace drive {
     13 
     14 class FileChange;
     15 
     16 // Set of changes.
     17 typedef std::set<FileChange> FileChangeSet;
     18 
     19 // Represents change in the filesystem. Rename is represented as two entries:
     20 // of type DELETED and ADDED. CHANGED type is for changed contents of
     21 // directories or for changed metadata and/or contents of files.
     22 class FileChange {
     23  public:
     24   enum Type {
     25     DELETED,
     26     ADDED,
     27     CHANGED,
     28   };
     29 
     30   // Created an object representing a change of file or directory pointed by
     31   // |change_path|. The change is of |change_type| type.
     32   FileChange(const base::FilePath& path, Type type);
     33   ~FileChange();
     34 
     35   // Factory method to create a FileChangeSet object with only one element.
     36   static FileChangeSet CreateSingleSet(const base::FilePath& path, Type type);
     37 
     38   bool operator==(const FileChange &file_change) const {
     39     return path_ == file_change.path() && type_ == file_change.type();
     40   }
     41 
     42   bool operator<(const FileChange &file_change) const {
     43     return (path_ < file_change.path()) ||
     44            (path_ == file_change.path() && type_ < file_change.type());
     45   }
     46 
     47   const base::FilePath& path() const { return path_; }
     48 
     49   Type type() const { return type_; }
     50 
     51  private:
     52   const base::FilePath path_;
     53   const Type type_;
     54 };
     55 
     56 }  // namespace drive
     57 
     58 #endif  // CHROME_BROWSER_CHROMEOS_DRIVE_FILE_CHANGE_H_
     59