#pragma once #include "cuboid.h" #include "concepts.h" namespace concepts { template concept CuboidConstructible = std::constructible_from; template concept PopulationAccess = Arithmetic && requires(BUFFER& b) { { b.get(unsigned{}, stage::pre_collision()) } -> std::same_as; { b.get(unsigned{}, stage::post_collision()) } -> std::same_as; }; template concept Propagatable = requires(BUFFER& b) { b.stream(); }; template concept PropagatablePopulationBuffer = CuboidConstructible && PopulationAccess && Propagatable; }