~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/chromium/src/base/scoped_observer.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
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 BASE_SCOPED_OBSERVER_H_
6
 
#define BASE_SCOPED_OBSERVER_H_
7
 
 
8
 
#include <algorithm>
9
 
#include <vector>
10
 
 
11
 
#include "base/basictypes.h"
12
 
 
13
 
// ScopedObserver is used to keep track of the set of sources an object has
14
 
// attached itself to as an observer. When ScopedObserver is destroyed it
15
 
// removes the object as an observer from all sources it has been added to.
16
 
template <class Source, class Observer>
17
 
class ScopedObserver {
18
 
 public:
19
 
  explicit ScopedObserver(Observer* observer) : observer_(observer) {}
20
 
 
21
 
  ~ScopedObserver() {
22
 
    for (size_t i = 0; i < sources_.size(); ++i)
23
 
      sources_[i]->RemoveObserver(observer_);
24
 
  }
25
 
 
26
 
  // Adds the object passed to the constructor as an observer on |source|.
27
 
  void Add(Source* source) {
28
 
    sources_.push_back(source);
29
 
    source->AddObserver(observer_);
30
 
  }
31
 
 
32
 
  // Remove the object passed to the constructor as an observer from |source|.
33
 
  void Remove(Source* source) {
34
 
    sources_.erase(std::find(sources_.begin(), sources_.end(), source));
35
 
    source->RemoveObserver(observer_);
36
 
  }
37
 
 
38
 
  bool IsObserving(Source* source) const {
39
 
    for (size_t i = 0; i < sources_.size(); ++i) {
40
 
      if (sources_[i] == source)
41
 
        return true;
42
 
    }
43
 
    return false;
44
 
  }
45
 
 
46
 
 private:
47
 
  Observer* observer_;
48
 
 
49
 
  std::vector<Source*> sources_;
50
 
 
51
 
  DISALLOW_COPY_AND_ASSIGN(ScopedObserver);
52
 
};
53
 
 
54
 
#endif  // BASE_SCOPED_OBSERVER_H_