Commit 4f8d1e21 authored by Jakub Klinkovský's avatar Jakub Klinkovský
Browse files

Refactoring: reimplemented TemplateStaticFor with constexpr functions and generic lambdas

- interface renamed from `TemplateStaticFor` to `staticFor`
- also added tests and updated documentation, read it for details
parent ad7ddcf3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -6,10 +6,14 @@ ELSE()
   ADD_CUSTOM_COMMAND( COMMAND ParallelForExample > ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/ParallelForExample.out OUTPUT ParallelForExample.out )
ENDIF()

ADD_EXECUTABLE(staticForExample staticForExample.cpp)
ADD_CUSTOM_COMMAND( COMMAND staticForExample > ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/staticForExample.out OUTPUT staticForExample.out )

ADD_EXECUTABLE(UnrolledForExample UnrolledForExample.cpp)
ADD_CUSTOM_COMMAND( COMMAND UnrolledForExample > ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/UnrolledForExample.out OUTPUT UnrolledForExample.out )

ADD_CUSTOM_TARGET( RunAlgorithmsExamples ALL DEPENDS
   ParallelForExample.out
   UnrolledForExample.out
   staticForExample.out
)
+0 −31
Original line number Diff line number Diff line
#include <iostream>
#include <cstdlib>
#include <TNL/Containers/StaticVector.h>
#include <TNL/Algorithms/TemplateStaticFor.h>

using namespace TNL;
using namespace TNL::Containers;

const int Size( 5 );

template< int I >
struct LoopBody
{
   static void exec( const StaticVector< Size, double >& v ) {
      std::cout << "v[ " << I << " ] = " << v[ I ] << std::endl;
   }
};

int main( int argc, char* argv[] )
{
   /****
    * Initiate static vector
    */
   StaticVector< Size, double > v{ 1.0, 2.0, 3.0, 4.0, 5.0 };

   /****
    * Print out the vector using template parameters for indexing.
    */
   Algorithms::TemplateStaticFor< 0, Size, LoopBody >::exec( v );
}
+16 −0
Original line number Diff line number Diff line
#include <iostream>
#include <array>
#include <TNL/Algorithms/staticFor.h>

int main( int argc, char* argv[] )
{
   // initiate std::array
   std::array< int, 5 > a{ 1, 2, 3, 4, 5 };

   // print out the array using template parameters for indexing
   TNL::Algorithms::staticFor< int, 0, 5 >(
      [&a] ( auto i ) {
         std::cout << "a[ " << i << " ] = " << std::get< i >( a ) << std::endl;
      }
   );
}
+0 −1
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ add_subdirectory( GeneralConcepts )
add_subdirectory( Arrays )
add_subdirectory( Vectors )
add_subdirectory( ReductionAndScan )
add_subdirectory( ForLoops )
add_subdirectory( Pointers )
add_subdirectory( Matrices )
add_subdirectory( Meshes )
+0 −6
Original line number Diff line number Diff line
ADD_EXECUTABLE( TemplateStaticForExample TemplateStaticForExample_ug.cpp )
ADD_CUSTOM_COMMAND( COMMAND TemplateStaticForExample > ${TNL_DOCUMENTATION_OUTPUT_SNIPPETS_PATH}/TemplateStaticForExample.out OUTPUT TemplateStaticForExample.out )

ADD_CUSTOM_TARGET( ForLoops ALL DEPENDS
   TemplateStaticForExample.out
)
Loading