Home | History | Annotate | Download | only in attachments
      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 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