1c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// Copyright 2017 The Chromium OS Authors. All rights reserved.
2c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// Use of this source code is governed by a BSD-style license that can be
3c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// found in the LICENSE file.
4c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
5c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#ifndef SRC_INCLUDE_PUFFIN_COMMON_H_
6c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#define SRC_INCLUDE_PUFFIN_COMMON_H_
7c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
88bbd2d588a07fa8cb7f99de4257a8855520fdd88Manoj Gupta#include <functional>
9c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#include <memory>
10c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#include <vector>
11c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
12c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#ifdef USE_BRILLO
13c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#include "base/macros.h"
14c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#include "brillo/brillo_export.h"
15c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#define PUFFIN_EXPORT BRILLO_EXPORT
16c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
17c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#else  // USE_BRILLO
18c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
19c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#ifndef DISALLOW_COPY_AND_ASSIGN
20c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
21c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  TypeName(const TypeName&) = delete;      \
22c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  void operator=(const TypeName&) = delete
23c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#endif  // DISALLOW_COPY_AND_ASSIGN
24c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
25c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#ifndef PUFFIN_EXPORT
26c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#define PUFFIN_EXPORT __attribute__((__visibility__("default")))
27c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#endif  // PUFFIN_EXPORT
28c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
29c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#endif  // USE_BRILLO
30c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
31c3e6b533aa435516b788ae353a43602c57936afdAmin Hassaninamespace puffin {
32c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
33c3e6b533aa435516b788ae353a43602c57936afdAmin Hassaniusing Buffer = std::vector<uint8_t>;
34c3e6b533aa435516b788ae353a43602c57936afdAmin Hassaniusing UniqueBufferPtr = std::unique_ptr<Buffer>;
35c3e6b533aa435516b788ae353a43602c57936afdAmin Hassaniusing SharedBufferPtr = std::shared_ptr<Buffer>;
36c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
37c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// This class is similar to the protobuf generated for |ProtoByteExtent|. We
38c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// defined an extra class so the users of puffin do not have to include
39c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani// puffin.pb.h and deal with its use.
40c3e6b533aa435516b788ae353a43602c57936afdAmin Hassanistruct PUFFIN_EXPORT ByteExtent {
41c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  ByteExtent(uint64_t offset, uint64_t length)
42c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani      : offset(offset), length(length) {}
43c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
44c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  bool operator==(const ByteExtent& other) const {
45c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani    return this->length == other.length && this->offset == other.offset;
46c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  }
47c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
48c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  uint64_t offset;
49c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani  uint64_t length;
50c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani};
51c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
527074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassanistruct PUFFIN_EXPORT BitExtent {
537074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani  BitExtent(uint64_t offset, uint64_t length)
547074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani      : offset(offset), length(length) {}
557074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani
567074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani  bool operator==(const BitExtent& other) const {
577074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani    return this->length == other.length && this->offset == other.offset;
587074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani  }
597074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani
607074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani  uint64_t offset;
617074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani  uint64_t length;
627074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani};
637074da6508f1ab7cb860342e2434c5f5804bafbfAmin Hassani
64c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani}  // namespace puffin
65c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani
66c3e6b533aa435516b788ae353a43602c57936afdAmin Hassani#endif  // SRC_INCLUDE_PUFFIN_COMMON_H_
67