/*
 * Copyright (C) 2017-2020  The Project X-Ray Authors.
 *
 * Use of this source code is governed by a ISC-style
 * license that can be found in the LICENSE file or at
 * https://opensource.org/licenses/ISC
 *
 * SPDX-License-Identifier: ISC
 */
#ifndef PRJXRAY_LIB_MEMORY_MAPPED_FILE
#define PRJXRAY_LIB_MEMORY_MAPPED_FILE

#include <memory>
#include <string>

#include <absl/types/span.h>

namespace prjxray {

class MemoryMappedFile {
       public:
	~MemoryMappedFile();

	static std::unique_ptr<MemoryMappedFile> InitWithFile(
	    const std::string& path);

	void* const data() const { return data_; }
	const size_t size() const { return size_; }

	absl::Span<uint8_t> as_bytes() const {
		return {static_cast<uint8_t*>(data_), size_};
	}

       private:
	MemoryMappedFile(void* data, size_t size) : data_(data), size_(size){};

	void* data_;
	size_t size_;
};

}  // namespace prjxray

#endif  // PRJXRAY_LIB_MEMORY_MAPPED_FILE
