Some checks failed
Build Packages / build:rpm (ubuntu2404_nocuda) (push) Failing after 9m36s
Build Packages / build:rpm (rocky8_nocuda) (push) Failing after 11m7s
Build Packages / build:rpm (rocky9_nocuda) (push) Failing after 11m13s
Build Packages / Generate python client (push) Successful in 27s
Build Packages / build:rpm (rocky8) (push) Failing after 11m47s
Build Packages / Create release (push) Has been skipped
Build Packages / build:rpm (ubuntu2204_nocuda) (push) Failing after 11m58s
Build Packages / Build documentation (push) Successful in 49s
Build Packages / build:rpm (ubuntu2204) (push) Failing after 12m26s
Build Packages / build:rpm (rocky9) (push) Failing after 12m46s
Build Packages / build:rpm (rocky8_sls9) (push) Failing after 12m51s
Build Packages / Unit tests (push) Failing after 4m29s
Build Packages / build:rpm (ubuntu2404) (push) Failing after 7m10s
24 lines
777 B
C
24 lines
777 B
C
// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute <filip.leonarski@psi.ch>
|
|
// 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
|
|
}
|
|
}
|