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_
12 #include "sync/base/sync_export.h"
13 #include "sync/internal_api/public/util/immutable.h"
16 class AttachmentIdProto
;
17 } // namespace sync_pb
21 // Uniquely identifies an attachment.
23 // Two attachments with equal (operator==) AttachmentIds are considered
25 class SYNC_EXPORT 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;
47 // Necessary since we forward-declare sync_pb::AttachmentIdProto; see comments
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
;
73 #endif // SYNC_API_ATTACHMENTS_ATTACHMENT_ID_H_