// // Sector.hpp // Clock Signal // // Created by Thomas Harte on 24/09/2017. // Copyright 2017 Thomas Harte. All rights reserved. // #pragma once #include #include namespace Storage::Encodings::MFM { /*! Represents a single [M]FM sector, identified by its track, side and sector records, a blob of data and a few extra flags of metadata. */ struct Sector { /*! Describes the location of a sector, implementing < to allow for use as a set key. */ struct Address { uint8_t track = 0, side = 0, sector = 0; bool operator < (const Address &rhs) const { return ((track << 24) | (side << 8) | sector) < ((rhs.track << 24) | (rhs.side << 8) | rhs.sector); } }; Address address; uint8_t size = 0; // Size is stored in ordinary MFM form: the number of bytes included in this sector // is 2^(7 + size), or 128 << size. // Multiple samplings of the underlying data are accepted, to allow weak and fuzzy data to be communicated. std::vector> samples; bool has_data_crc_error = false; bool has_header_crc_error = false; bool is_deleted = false; Sector() noexcept {} Sector(const Sector &&rhs) noexcept : address(rhs.address), size(rhs.size), samples(std::move(rhs.samples)), has_data_crc_error(rhs.has_data_crc_error), has_header_crc_error(rhs.has_header_crc_error), is_deleted(rhs.is_deleted ){} }; }