From c21c3b0befeb46a51b6bf3758ffa30813bea0ff0 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 9 Mar 2024 14:19:22 +0100 Subject: Adding upstream version 1.44.3. Signed-off-by: Daniel Baumann --- ml/dlib/dlib/metaprogramming.h | 71 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 ml/dlib/dlib/metaprogramming.h (limited to 'ml/dlib/dlib/metaprogramming.h') diff --git a/ml/dlib/dlib/metaprogramming.h b/ml/dlib/dlib/metaprogramming.h new file mode 100644 index 000000000..bc63041ff --- /dev/null +++ b/ml/dlib/dlib/metaprogramming.h @@ -0,0 +1,71 @@ +// Copyright (C) 2017 Davis E. King (davis@dlib.net) +// License: Boost Software License See LICENSE.txt for the full license. +#ifndef DLIB_METApROGRAMMING_Hh_ +#define DLIB_METApROGRAMMING_Hh_ + + +namespace dlib +{ + +// ---------------------------------------------------------------------------------------- + + template + struct compile_time_integer_list + { + /*! + WHAT THIS OBJECT REPRESENTS + The point of this type is to, as the name suggests, hold a compile time list of integers. + As an example, here is something simple you could do with it: + + template + void print_compile_time_ints ( + compile_time_integer_list + ) + { + print(ints...); + } + + int main() + { + print_compile_time_ints(compile_time_integer_list<0,4,9>()); + } + + Which just calls: print(0,4,9); + + This is a simple example, but this kind of thing is useful in larger and + more complex template metaprogramming constructs. + !*/ + + template + struct push_back + { + typedef compile_time_integer_list type; + }; + }; + +// ---------------------------------------------------------------------------------------- + + template + struct make_compile_time_integer_range + { + /*! + WHAT THIS OBJECT REPRESENTS + This object makes a compile_time_integer_list containing the integers in the range [1,max] inclusive. + For example: + make_compile_time_integer_range<4>::type + evaluates to: + compile_time_integer_list<1,2,3,4> + !*/ + + typedef typename make_compile_time_integer_range::type::template push_back::type type; + }; + // base case + template <> struct make_compile_time_integer_range<0> { typedef compile_time_integer_list<> type; }; + +// ---------------------------------------------------------------------------------------- + +} + +#endif // DLIB_METApROGRAMMING_Hh_ + + -- cgit v1.2.3