#pragma once #include "defs.h" template struct TQueueChunkDerived { static const ui32 EntriesCount = (TSize - sizeof(TQueueChunkDerived*)) / sizeof(T); static_assert(EntriesCount > 0, "expect EntriesCount > 0"); volatile T Entries[EntriesCount]; TDerived* volatile Next; TQueueChunkDerived() { memset(this, 0, sizeof(TQueueChunkDerived)); } }; template struct TQueueChunk { static const ui32 EntriesCount = (TSize - sizeof(TQueueChunk*)) / sizeof(T); static_assert(EntriesCount > 0, "expect EntriesCount > 0"); volatile T Entries[EntriesCount]; TQueueChunk* volatile Next; TQueueChunk() { memset(this, 0, sizeof(TQueueChunk)); } };