pfor/examples/types.cpp

49 lines
1.2 KiB
C++

#include <algorithm>
#include <iostream>
#include <iterator>
#include <pfor/pfor.h>
#define N 10
template<typename..., typename... Ts>
void printTypes(Ts...) {
std::puts(__PRETTY_FUNCTION__);
}
int main() {
int dummy[N+1];
auto a = pfor::Operand<int*, class IDa>(dummy);
auto b = pfor::Operand<int*, class IDb>(dummy);
auto c = pfor::Operand<int*, class IDc>(dummy);
auto d = pfor::Operand<int*, class IDd>(dummy);
auto e = pfor::Operand<int*, class IDe>(dummy);
auto f = pfor::Operand<int*, class IDf>(dummy);
pfor::Index i;
auto expr =
(
a[i] = a[i] * b[i],
c[i] = c[i+pfor::ctv<1>] + d[i],
b[i] = b[i] + 1,
d[i] = c[i]^e[i],
f[i] = 2 * f[i]
);
using CommaSplittedExpr = pfor::expr::SplitComma<decltype(expr)>;
using ExprInfo = pfor::expr::ExpressionInfo<CommaSplittedExpr>;
using Clusters = typename pfor::impl::ClustersGenImpl<pfor::Pack<>, ExprInfo>::type;
using ClustersIds = pfor::ClustersExpressionIds<Clusters>;
using Type = pfor::PackSort<pfor::ComparatorUIntPack, ClustersIds>;
printTypes(expr);
std::puts("--");
printTypes<CommaSplittedExpr>();
std::puts("--");
printTypes<ExprInfo>();
std::puts("--");
printTypes<Clusters>();
std::puts("--");
printTypes<Type>();
}