Line data Source code
1 : // SPDX-FileCopyrightText: 2024 PairInteraction Developers 2 : // SPDX-License-Identifier: LGPL-3.0-or-later 3 : 4 : #pragma once 5 : 6 : #include <cstddef> 7 : 8 : namespace pairinteraction::utils { 9 : constexpr std::size_t M_OFFSET = 500; 10 : constexpr std::size_t KET_ID_STRIDE = 2 * M_OFFSET; 11 : 12 : struct IdAndM { 13 : std::size_t id; 14 : double m; 15 : }; 16 : 17 488 : inline std::size_t encode_as_ket_id(IdAndM id_and_m) { 18 488 : return id_and_m.id * KET_ID_STRIDE + static_cast<std::size_t>(2 * id_and_m.m + M_OFFSET); 19 : } 20 : 21 2072 : inline IdAndM decode_from_ket_id(std::size_t ket_id) { 22 : return { 23 2072 : .id = ket_id / KET_ID_STRIDE, 24 2072 : .m = (static_cast<double>(ket_id % KET_ID_STRIDE) - static_cast<double>(M_OFFSET)) / 2.0, 25 2072 : }; 26 : } 27 : } // namespace pairinteraction::utils