Home | History | Annotate | Download | only in sync_file_system
      1 // Copyright 2014 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_SYNC_FILE_SYSTEM_SUBTREE_SET_H_
      6 #define CHROME_BROWSER_SYNC_FILE_SYSTEM_SUBTREE_SET_H_
      7 
      8 #include "base/containers/hash_tables.h"
      9 #include "base/files/file_path.h"
     10 
     11 namespace base {
     12 class FilePath;
     13 }  // namespace base
     14 
     15 namespace sync_file_system {
     16 
     17 // Stores disjoint subtrees of a directory tree.
     18 class SubtreeSet {
     19  public:
     20   SubtreeSet();
     21   ~SubtreeSet();
     22 
     23   // Returns true if the subtree induced by |subtree_root| is disjoint with
     24   // all subtrees in the container.
     25   bool IsDisjointWith(const base::FilePath& subtree_root) const;
     26 
     27   // Returns true and inserts the subtree induced by |subtree_root| if the
     28   // subtree is disjoint with all subtrees in the container.
     29   bool insert(const base::FilePath& subtree_root);
     30 
     31   // Erases the subtree induced by |subtree_root| from the container.
     32   // Returns true if this erases the subtree.
     33   bool erase(const base::FilePath& subtree_root);
     34 
     35   size_t size() const;
     36   bool empty() const { return inclusive_ancestors_of_subtree_roots_.empty(); }
     37 
     38  private:
     39   struct Node {
     40     bool contained_as_subtree_root;
     41     size_t number_of_subtrees_below;
     42 
     43     Node();
     44     Node(bool contained_as_subtree_root,
     45          size_t number_of_subtrees_below);
     46   };
     47 
     48   typedef base::FilePath::StringType StringType;
     49   typedef base::hash_map<StringType, Node> Subtrees;
     50 
     51   // Contains the root of subtrees and all upward node to root.
     52   // Each subtree root has |contained_as_subtree_root| flag true.
     53   Subtrees inclusive_ancestors_of_subtree_roots_;
     54 };
     55 
     56 }  // namespace sync_file_system
     57 
     58 #endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_SUBTREE_SET_H_
     59