Skip to content
Snippets Groups Projects
Select Git revision
  • 5252ebbd66a98a501343d034cb7d4a1a25e14f38
  • develop default protected
  • feature/variational-hydro
  • origin/stage/bouguettaia
  • feature/gmsh-reader
  • feature/reconstruction
  • save_clemence
  • feature/kinetic-schemes
  • feature/local-dt-fsi
  • feature/composite-scheme-sources
  • feature/composite-scheme-other-fluxes
  • feature/serraille
  • feature/composite-scheme
  • hyperplastic
  • feature/polynomials
  • feature/gks
  • feature/implicit-solver-o2
  • feature/coupling_module
  • feature/implicit-solver
  • feature/merge-local-dt-fsi
  • master protected
  • v0.5.0 protected
  • v0.4.1 protected
  • v0.4.0 protected
  • v0.3.0 protected
  • v0.2.0 protected
  • v0.1.0 protected
  • Kidder
  • v0.0.4 protected
  • v0.0.3 protected
  • v0.0.2 protected
  • v0 protected
  • v0.0.1 protected
33 results

GmshReader.cpp

Blame
  • TupleToVectorProcessor.hpp 1.26 KiB
    #ifndef TUPLE_TO_VECTOR_PROCESSOR_HPP
    #define TUPLE_TO_VECTOR_PROCESSOR_HPP
    
    #include <node_processor/INodeProcessor.hpp>
    
    template <typename TupleProcessorT, size_t N>
    class TupleToVectorProcessor final : public INodeProcessor
    {
     private:
      ASTNode& m_node;
    
      std::unique_ptr<TupleProcessorT> m_tuple_processor;
    
     public:
      DataVariant
      execute(ExecutionPolicy& exec_policy)
      {
        AggregateDataVariant v = std::get<AggregateDataVariant>(m_tuple_processor->execute(exec_policy));
    
        Assert(v.size() == N);
    
        TinyVector<N> x;
    
        for (size_t i = 0; i < N; ++i) {
          std::visit(
            [&](auto&& v) {
              using ValueT = std::decay_t<decltype(v)>;
              if constexpr (std::is_arithmetic_v<ValueT>) {
                x[i] = v;
              } else {
                // LCOV_EXCL_START
                Assert(false, "unexpected value type");
                // LCOV_EXCL_STOP
              }
            },
            v[i]);
        }
    
        return DataVariant{std::move(x)};
      }
    
      TupleToVectorProcessor(ASTNode& node) : m_node{node}, m_tuple_processor{std::make_unique<TupleProcessorT>(node)} {}
    
      TupleToVectorProcessor(ASTNode& node, std::unique_ptr<TupleProcessorT>&& tuple_processor)
        : m_node{node}, m_tuple_processor{std::move(tuple_processor)}
      {}
    };
    
    #endif   // TUPLE_TO_VECTOR_PROCESSOR_HPP