1// Copyright 2013 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#include "chrome/browser/sync_file_system/drive_backend/tracker_set.h"
6
7#include "base/logging.h"
8#include "base/stl_util.h"
9#include "chrome/browser/sync_file_system/drive_backend/metadata_database.pb.h"
10
11namespace sync_file_system {
12namespace drive_backend {
13
14bool TrackerSet::TrackerComparator::operator()(const FileTracker* left,
15                                               const FileTracker* right) const {
16  return left->tracker_id() < right->tracker_id();
17}
18
19TrackerSet::TrackerSet()
20    : active_tracker_(NULL) {
21}
22
23TrackerSet::~TrackerSet() {}
24
25void TrackerSet::Insert(FileTracker* tracker) {
26  if (tracker_set_.insert(tracker).second && tracker->active()) {
27    DCHECK(!active_tracker_);
28    active_tracker_ = tracker;
29  }
30}
31
32void TrackerSet::Erase(FileTracker* tracker) {
33  if (tracker_set_.erase(tracker) == 1 && active_tracker_ == tracker)
34    active_tracker_ = NULL;
35}
36
37void TrackerSet::Activate(FileTracker* tracker) {
38  DCHECK(!active_tracker_);
39  DCHECK(ContainsKey(tracker_set_, tracker));
40  active_tracker_ = tracker;
41}
42
43void TrackerSet::Inactivate(FileTracker* tracker) {
44  DCHECK(tracker->active());
45  DCHECK_EQ(tracker, active_tracker_);
46  DCHECK(ContainsKey(tracker_set_, tracker));
47  active_tracker_ = NULL;
48}
49
50}  // namespace drive_backend
51}  // namespace sync_file_system
52