Program Listing for File beam_ops.cxx¶
↰ Return to documentation for file (dx2/beam_ops.cxx)
#include <dx2/beam.hpp>
#include <dx2/beam_ops.hpp>
#include <stdexcept>
#include <variant>
namespace beam_ops {
MonochromaticBeam &require_monochromatic(Beam &beam) {
if (auto *b = std::get_if<MonochromaticBeam>(&beam)) {
return *b;
}
throw std::invalid_argument("Beam must be monochromatic");
}
const MonochromaticBeam &require_monochromatic(const Beam &beam) {
if (auto *b = std::get_if<MonochromaticBeam>(&beam)) {
return *b;
}
throw std::invalid_argument("Beam must be monochromatic");
}
PolychromaticBeam &require_polychromatic(Beam &beam) {
if (auto *b = std::get_if<PolychromaticBeam>(&beam)) {
return *b;
}
throw std::invalid_argument("Beam must be polychromatic");
}
const PolychromaticBeam &require_polychromatic(const Beam &beam) {
if (auto *b = std::get_if<PolychromaticBeam>(&beam)) {
return *b;
}
throw std::invalid_argument("Beam must be polychromatic");
}
} // namespace beam_ops