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 COMPONENTS_INVALIDATION_SINGLE_OBJECT_INVALIDATION_SET_H_
6#define COMPONENTS_INVALIDATION_SINGLE_OBJECT_INVALIDATION_SET_H_
7
8#include <set>
9
10#include "base/memory/scoped_ptr.h"
11#include "components/invalidation/invalidation.h"
12#include "components/invalidation/invalidation_export.h"
13#include "components/invalidation/invalidation_util.h"
14
15namespace base {
16class ListValue;
17}  // namespace base
18
19namespace syncer {
20
21// Holds a list of invalidations that all share the same Object ID.
22//
23// The list is kept sorted by version to make it easier to perform common
24// operations, like checking for an unknown version invalidation or fetching the
25// highest invalidation with the highest version number.
26class INVALIDATION_EXPORT SingleObjectInvalidationSet {
27 public:
28  typedef std::set<Invalidation, InvalidationVersionLessThan> InvalidationsSet;
29  typedef InvalidationsSet::const_iterator const_iterator;
30  typedef InvalidationsSet::const_reverse_iterator const_reverse_iterator;
31
32  SingleObjectInvalidationSet();
33  ~SingleObjectInvalidationSet();
34
35  void Insert(const Invalidation& invalidation);
36  void InsertAll(const SingleObjectInvalidationSet& other);
37  void Clear();
38  void Erase(const_iterator it);
39
40  // Returns true if this list contains an unknown version.
41  //
42  // Unknown version invalidations always end up at the start of the list,
43  // because they have the lowest possible value in the sort ordering.
44  bool StartsWithUnknownVersion() const;
45  size_t GetSize() const;
46  bool IsEmpty() const;
47  bool operator==(const SingleObjectInvalidationSet& other) const;
48
49  const_iterator begin() const;
50  const_iterator end() const;
51  const_reverse_iterator rbegin() const;
52  const_reverse_iterator rend() const;
53  const Invalidation& back() const;
54
55  scoped_ptr<base::ListValue> ToValue() const;
56  bool ResetFromValue(const base::ListValue& list);
57
58 private:
59  InvalidationsSet invalidations_;
60};
61
62}  // syncer
63
64#endif  // COMPONENTS_INVALIDATION_SINGLE_OBJECT_INVALIDATION_SET_H_
65