• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_
6 #define SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_
7 
8 #include <set>
9 #include <string>
10 #include <vector>
11 
12 #include "sync/base/sync_export.h"
13 #include "sync/internal_api/public/util/immutable.h"
14 
15 namespace sync_pb {
16 class AttachmentIdProto;
17 }  // namespace sync_pb
18 
19 namespace syncer {
20 
21 // Uniquely identifies an attachment.
22 //
23 // Two attachments with equal (operator==) AttachmentIds are considered
24 // equivalent.
25 class SYNC_EXPORT AttachmentId {
26  public:
27   ~AttachmentId();
28 
29   // Default copy and assignment are welcome.
30 
31   bool operator==(const AttachmentId& other) const;
32 
33   bool operator!=(const AttachmentId& other) const;
34 
35   // Needed for using AttachmentId as key in std::map.
36   bool operator<(const AttachmentId& other) const;
37 
38   // Creates a unique attachment id.
39   static AttachmentId Create();
40 
41   // Creates an attachment id from an initialized proto.
42   static AttachmentId CreateFromProto(const sync_pb::AttachmentIdProto& proto);
43 
44   const sync_pb::AttachmentIdProto& GetProto() const;
45 
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);
57   };
58 
59   typedef Immutable<sync_pb::AttachmentIdProto,
60                     ImmutableAttachmentIdProtoTraits>
61       ImmutableAttachmentIdProto;
62 
63   ImmutableAttachmentIdProto proto_;
64 
65   AttachmentId(sync_pb::AttachmentIdProto* proto);
66 };
67 
68 typedef std::vector<AttachmentId> AttachmentIdList;
69 typedef std::set<AttachmentId> AttachmentIdSet;
70 
71 }  // namespace syncer
72 
73 #endif  // SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_
74