Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:05:57

0001 //----------------------------------*-C++-*----------------------------------//
0002 // Copyright 2023-2024 UT-Battelle, LLC, and other Celeritas developers.
0003 // See the top-level COPYRIGHT file for details.
0004 // SPDX-License-Identifier: (Apache-2.0 OR MIT)
0005 //---------------------------------------------------------------------------//
0006 //! \file orange/transform/VariantTransform.hh
0007 //---------------------------------------------------------------------------//
0008 #pragma once
0009 
0010 #include <variant>
0011 
0012 #include "corecel/cont/VariantUtils.hh"
0013 
0014 #include "NoTransformation.hh"
0015 #include "SignedPermutation.hh"
0016 #include "TransformTypeTraits.hh"
0017 #include "Transformation.hh"
0018 #include "Translation.hh"
0019 
0020 namespace celeritas
0021 {
0022 template<class T>
0023 class BoundingBox;
0024 
0025 //---------------------------------------------------------------------------//
0026 //! std::variant for all transforms.
0027 using VariantTransform = EnumVariant<TransformType, TransformTypeTraits>;
0028 
0029 //---------------------------------------------------------------------------//
0030 // Apply the left "daughter-to-parent" transform to the right
0031 [[nodiscard]] VariantTransform
0032 apply_transform(VariantTransform const& left, VariantTransform const& right);
0033 
0034 //---------------------------------------------------------------------------//
0035 // Calculate the inverse of a transform
0036 [[nodiscard]] VariantTransform calc_inverse(VariantTransform const& transform);
0037 
0038 //---------------------------------------------------------------------------//
0039 // Dispatch "daughter-to-parent" transform to bounding box utilities
0040 [[nodiscard]] BoundingBox<real_type>
0041 apply_transform(VariantTransform const& transform,
0042                 BoundingBox<real_type> const& bbox);
0043 
0044 //---------------------------------------------------------------------------//
0045 }  // namespace celeritas