Roll leveldb 3f7758:803d69 (v1.17 -> v1.18)
[chromium-blink-merge.git] / sync / api / attachments / attachment_id.h
blob6ce331a98aa55091a0eae4f4b391113d888bc245
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.
5 #ifndef SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_
6 #define SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_
8 #include <set>
9 #include <string>
10 #include <vector>
12 #include "sync/base/sync_export.h"
13 #include "sync/internal_api/public/util/immutable.h"
15 namespace sync_pb {
16 class AttachmentIdProto;
17 } // namespace sync_pb
19 namespace syncer {
21 // Uniquely identifies an attachment.
23 // Two attachments with equal (operator==) AttachmentIds are considered
24 // equivalent.
25 class SYNC_EXPORT AttachmentId {
26 public:
27 ~AttachmentId();
29 // Default copy and assignment are welcome.
31 bool operator==(const AttachmentId& other) const;
33 bool operator!=(const AttachmentId& other) const;
35 // Needed for using AttachmentId as key in std::map.
36 bool operator<(const AttachmentId& other) const;
38 // Creates a unique attachment id.
39 static AttachmentId Create();
41 // Creates an attachment id from an initialized proto.
42 static AttachmentId CreateFromProto(const sync_pb::AttachmentIdProto& proto);
44 const sync_pb::AttachmentIdProto& GetProto() const;
46 private:
47 // Necessary since we forward-declare sync_pb::AttachmentIdProto; see comments
48 // in immutable.h.
49 struct SYNC_EXPORT ImmutableAttachmentIdProtoTraits {
50 typedef sync_pb::AttachmentIdProto* Wrapper;
51 static void InitializeWrapper(Wrapper* wrapper);
52 static void DestroyWrapper(Wrapper* wrapper);
53 static const sync_pb::AttachmentIdProto& Unwrap(const Wrapper& wrapper);
54 static sync_pb::AttachmentIdProto* UnwrapMutable(Wrapper* wrapper);
55 static void Swap(sync_pb::AttachmentIdProto* t1,
56 sync_pb::AttachmentIdProto* t2);
59 typedef Immutable<sync_pb::AttachmentIdProto,
60 ImmutableAttachmentIdProtoTraits>
61 ImmutableAttachmentIdProto;
63 ImmutableAttachmentIdProto proto_;
65 AttachmentId(sync_pb::AttachmentIdProto* proto);
68 typedef std::vector<AttachmentId> AttachmentIdList;
69 typedef std::set<AttachmentId> AttachmentIdSet;
71 } // namespace syncer
73 #endif // SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_