#pragma once #include #include #include #include #include #include "./ft1_sha1_info.hpp" #include "./hash_utils.hpp" #include // TODO: rename to object components namespace Components { struct Messages { // dense set instead? std::vector messages; }; using FT1InfoSHA1 = FT1InfoSHA1; struct FT1InfoSHA1Data { std::vector data; }; struct FT1InfoSHA1Hash { std::vector hash; }; struct FT1ChunkSHA1Cache { //std::vector have_chunk; // have_chunk is the size of info.chunks.size(), or empty if have_all // keep in mind bitset rounds up to 8s BitSet have_chunk{0}; bool have_all {false}; size_t have_count {0}; entt::dense_map> chunk_hash_to_index; std::vector chunkIndices(const SHA1Digest& hash) const; bool haveChunk(const SHA1Digest& hash) const; }; struct FT1ChunkSHA1Requested { // requested chunks with a timer since last request entt::dense_map chunks; }; // TODO: once announce is shipped, remove the "Suspected" struct SuspectedParticipants { entt::dense_set participants; }; struct ReRequestInfoTimer { float timer {0.f}; }; struct ReadHeadHint { // points to the first byte we want // this is just a hint, that can be set from outside // to guide the sequential "piece picker" strategy // the strategy *should* set this to the first byte we dont yet have uint64_t offset_into_file {0u}; }; } // Components