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