diff options
author | max42 <max42@yandex-team.com> | 2023-07-29 00:02:16 +0300 |
---|---|---|
committer | max42 <max42@yandex-team.com> | 2023-07-29 00:02:16 +0300 |
commit | 73b89de71748a21e102d27b9f3ed1bf658766cb5 (patch) | |
tree | 188bbd2d622fa91cdcbb1b6d6d77fbc84a0646f5 /yt/cpp/mapreduce/interface/mpl.h | |
parent | 528e321bcc2a2b67b53aeba58c3bd88305a141ee (diff) | |
download | ydb-73b89de71748a21e102d27b9f3ed1bf658766cb5.tar.gz |
YT-19210: expose YQL shared library for YT.
After this, a new target libyqlplugin.so appears. in open-source cmake build.
Diff in open-source YDB repo looks like the following: https://paste.yandex-team.ru/f302bdb4-7ef2-4362-91c7-6ca45f329264
Diffstat (limited to 'yt/cpp/mapreduce/interface/mpl.h')
-rw-r--r-- | yt/cpp/mapreduce/interface/mpl.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/yt/cpp/mapreduce/interface/mpl.h b/yt/cpp/mapreduce/interface/mpl.h new file mode 100644 index 00000000000..9865e28b6c3 --- /dev/null +++ b/yt/cpp/mapreduce/interface/mpl.h @@ -0,0 +1,73 @@ +#pragma once + +#include "fwd.h" + +#include <tuple> +#include <type_traits> + +namespace NYT { + +/// @cond Doxygen_Suppress + +//////////////////////////////////////////////////////////////////////////////// + +template <class TBase, class TDerived> +struct TIsBaseOf +{ + static constexpr bool Value = std::is_base_of_v<TBase, TDerived> && !std::is_same_v<TBase, TDerived>; +}; + +//////////////////////////////////////////////////////////////////////////////// + +namespace NDetail { + +template <class T, class Tuple> +struct TIndexInTuple; + +template <class T, class... Types> +struct TIndexInTuple<T, std::tuple<T, Types...>> +{ + static constexpr int Value = 0; +}; + +template <class T> +struct TIndexInTuple<T, std::tuple<>> +{ + static constexpr int Value = 0; +}; + +template <class T, class U, class... Types> +struct TIndexInTuple<T, std::tuple<U, Types...>> +{ + static constexpr int Value = 1 + TIndexInTuple<T, std::tuple<Types...>>::Value; +}; + +template <class T, class TTuple> +constexpr bool DoesTupleContainType = (TIndexInTuple<T, TTuple>::Value < std::tuple_size<TTuple>{}); + +template <class TOut, class TIn = std::tuple<>> +struct TUniqueTypes; + +template <class... TOut, class TInCar, class... TInCdr> +struct TUniqueTypes<std::tuple<TOut...>, std::tuple<TInCar, TInCdr...>> +{ + using TType = std::conditional_t< + DoesTupleContainType<TInCar, std::tuple<TOut...>>, + typename TUniqueTypes<std::tuple<TOut...>, std::tuple<TInCdr...>>::TType, + typename TUniqueTypes<std::tuple<TOut..., TInCar>, std::tuple<TInCdr...>>::TType + >; +}; + +template <class TOut> +struct TUniqueTypes<TOut, std::tuple<>> +{ + using TType = TOut; +}; + +} // namespace NDetail + +/// @endcond Doxygen_Suppress + +//////////////////////////////////////////////////////////////////////////////// + +} |