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