// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #pragma once inline bool odd_int(int v) { return (v & 1) != 0; } inline bool systematic_absence(int h, int k, int l, char centering) { if (h == 0 && k == 0 && l == 0) return true; switch (centering) { case 'I': return odd_int(h + k + l); case 'A': return odd_int(k + l); case 'B': return odd_int(h + l); case 'C': return odd_int(h + k); case 'F': return (odd_int(h + k) || odd_int(h + l) || odd_int(k + l)); case 'R': { int mod = (-h + k + l) % 3; if (mod < 0) mod += 3; return mod != 0; } default: return false; // P } }