// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef FLUTTER_FML_MAPPING_H_ #define FLUTTER_FML_MAPPING_H_ #include #include #include #include #include "flutter/fml/build_config.h" #include "flutter/fml/file.h" #include "flutter/fml/macros.h" #include "flutter/fml/unique_fd.h" namespace fml { class Mapping { public: Mapping(); virtual ~Mapping(); virtual size_t GetSize() const = 0; virtual const uint8_t* GetMapping() const = 0; private: FML_DISALLOW_COPY_AND_ASSIGN(Mapping); }; class FileMapping : public Mapping { public: enum class Protection { kRead, kWrite, kExecute, }; FileMapping(const fml::UniqueFD& fd, std::initializer_list protection = { Protection::kRead}); ~FileMapping() override; size_t GetSize() const override; const uint8_t* GetMapping() const override; uint8_t* GetMutableMapping(); private: size_t size_ = 0; uint8_t* mapping_ = nullptr; uint8_t* mutable_mapping_ = nullptr; #if OS_WIN fml::UniqueFD mapping_handle_; #endif FML_DISALLOW_COPY_AND_ASSIGN(FileMapping); }; class DataMapping : public Mapping { public: DataMapping(std::vector data); ~DataMapping() override; size_t GetSize() const override; const uint8_t* GetMapping() const override; private: std::vector data_; FML_DISALLOW_COPY_AND_ASSIGN(DataMapping); }; class NonOwnedMapping : public Mapping { public: NonOwnedMapping(const uint8_t* data, size_t size) : data_(data), size_(size) {} size_t GetSize() const override; const uint8_t* GetMapping() const override; private: const uint8_t* const data_; const size_t size_; FML_DISALLOW_COPY_AND_ASSIGN(NonOwnedMapping); }; } // namespace fml #endif // FLUTTER_FML_MAPPING_H_