mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
Namespace and indentation emacs choices
This commit is contained in:
parent
8c675064bd
commit
2d13ea1a22
@ -27,7 +27,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
|||||||
See the full license in the file "LICENSE" in the top level distribution
|
See the full license in the file "LICENSE" in the top level distribution
|
||||||
directory
|
directory
|
||||||
*************************************************************************************/
|
*************************************************************************************/
|
||||||
/* END LEGAL */
|
/* END LEGAL */
|
||||||
#ifndef GRID_LATTICE_ET_H
|
#ifndef GRID_LATTICE_ET_H
|
||||||
#define GRID_LATTICE_ET_H
|
#define GRID_LATTICE_ET_H
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ directory
|
|||||||
#include <typeinfo>
|
#include <typeinfo>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
namespace Grid {
|
NAMESPACE_BEGIN(Grid);
|
||||||
|
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// Predicated where support
|
// Predicated where support
|
||||||
@ -105,18 +105,18 @@ inline const lobj &eval(const unsigned int ss, const Lattice<lobj> &arg) {
|
|||||||
// handle nodes in syntax tree
|
// handle nodes in syntax tree
|
||||||
template <typename Op, typename T1>
|
template <typename Op, typename T1>
|
||||||
auto inline eval(
|
auto inline eval(
|
||||||
const unsigned int ss,
|
const unsigned int ss,
|
||||||
const LatticeUnaryExpression<Op, T1> &expr) // eval one operand
|
const LatticeUnaryExpression<Op, T1> &expr) // eval one operand
|
||||||
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)))) {
|
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)))) {
|
||||||
return expr.first.func(eval(ss, std::get<0>(expr.second)));
|
return expr.first.func(eval(ss, std::get<0>(expr.second)));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Op, typename T1, typename T2>
|
template <typename Op, typename T1, typename T2>
|
||||||
auto inline eval(
|
auto inline eval(
|
||||||
const unsigned int ss,
|
const unsigned int ss,
|
||||||
const LatticeBinaryExpression<Op, T1, T2> &expr) // eval two operands
|
const LatticeBinaryExpression<Op, T1, T2> &expr) // eval two operands
|
||||||
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)),
|
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)),
|
||||||
eval(ss, std::get<1>(expr.second)))) {
|
eval(ss, std::get<1>(expr.second)))) {
|
||||||
return expr.first.func(eval(ss, std::get<0>(expr.second)),
|
return expr.first.func(eval(ss, std::get<0>(expr.second)),
|
||||||
eval(ss, std::get<1>(expr.second)));
|
eval(ss, std::get<1>(expr.second)));
|
||||||
}
|
}
|
||||||
@ -124,10 +124,10 @@ auto inline eval(
|
|||||||
template <typename Op, typename T1, typename T2, typename T3>
|
template <typename Op, typename T1, typename T2, typename T3>
|
||||||
auto inline eval(const unsigned int ss,
|
auto inline eval(const unsigned int ss,
|
||||||
const LatticeTrinaryExpression<Op, T1, T2, T3>
|
const LatticeTrinaryExpression<Op, T1, T2, T3>
|
||||||
&expr) // eval three operands
|
&expr) // eval three operands
|
||||||
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)),
|
-> decltype(expr.first.func(eval(ss, std::get<0>(expr.second)),
|
||||||
eval(ss, std::get<1>(expr.second)),
|
eval(ss, std::get<1>(expr.second)),
|
||||||
eval(ss, std::get<2>(expr.second)))) {
|
eval(ss, std::get<2>(expr.second)))) {
|
||||||
return expr.first.func(eval(ss, std::get<0>(expr.second)),
|
return expr.first.func(eval(ss, std::get<0>(expr.second)),
|
||||||
eval(ss, std::get<1>(expr.second)),
|
eval(ss, std::get<1>(expr.second)),
|
||||||
eval(ss, std::get<2>(expr.second)));
|
eval(ss, std::get<2>(expr.second)));
|
||||||
@ -159,13 +159,13 @@ inline void GridFromExpression(GridBase *&grid,
|
|||||||
|
|
||||||
template <typename Op, typename T1, typename T2>
|
template <typename Op, typename T1, typename T2>
|
||||||
inline void GridFromExpression(
|
inline void GridFromExpression(
|
||||||
GridBase *&grid, const LatticeBinaryExpression<Op, T1, T2> &expr) {
|
GridBase *&grid, const LatticeBinaryExpression<Op, T1, T2> &expr) {
|
||||||
GridFromExpression(grid, std::get<0>(expr.second)); // recurse
|
GridFromExpression(grid, std::get<0>(expr.second)); // recurse
|
||||||
GridFromExpression(grid, std::get<1>(expr.second));
|
GridFromExpression(grid, std::get<1>(expr.second));
|
||||||
}
|
}
|
||||||
template <typename Op, typename T1, typename T2, typename T3>
|
template <typename Op, typename T1, typename T2, typename T3>
|
||||||
inline void GridFromExpression(
|
inline void GridFromExpression(
|
||||||
GridBase *&grid, const LatticeTrinaryExpression<Op, T1, T2, T3> &expr) {
|
GridBase *&grid, const LatticeTrinaryExpression<Op, T1, T2, T3> &expr) {
|
||||||
GridFromExpression(grid, std::get<0>(expr.second)); // recurse
|
GridFromExpression(grid, std::get<0>(expr.second)); // recurse
|
||||||
GridFromExpression(grid, std::get<1>(expr.second));
|
GridFromExpression(grid, std::get<1>(expr.second));
|
||||||
GridFromExpression(grid, std::get<2>(expr.second));
|
GridFromExpression(grid, std::get<2>(expr.second));
|
||||||
@ -207,7 +207,7 @@ inline void CBFromExpression(int &cb,
|
|||||||
}
|
}
|
||||||
template <typename Op, typename T1, typename T2, typename T3>
|
template <typename Op, typename T1, typename T2, typename T3>
|
||||||
inline void CBFromExpression(
|
inline void CBFromExpression(
|
||||||
int &cb, const LatticeTrinaryExpression<Op, T1, T2, T3> &expr) {
|
int &cb, const LatticeTrinaryExpression<Op, T1, T2, T3> &expr) {
|
||||||
CBFromExpression(cb, std::get<0>(expr.second)); // recurse
|
CBFromExpression(cb, std::get<0>(expr.second)); // recurse
|
||||||
CBFromExpression(cb, std::get<1>(expr.second));
|
CBFromExpression(cb, std::get<1>(expr.second));
|
||||||
CBFromExpression(cb, std::get<2>(expr.second));
|
CBFromExpression(cb, std::get<2>(expr.second));
|
||||||
@ -217,9 +217,9 @@ inline void CBFromExpression(
|
|||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
// Unary operators and funcs
|
// Unary operators and funcs
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
#define GridUnopClass(name, ret) \
|
#define GridUnopClass(name, ret) \
|
||||||
template <class arg> \
|
template <class arg> \
|
||||||
struct name { \
|
struct name { \
|
||||||
static auto inline func(const arg a) -> decltype(ret) { return ret; } \
|
static auto inline func(const arg a) -> decltype(ret) { return ret; } \
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -250,13 +250,13 @@ GridUnopClass(UnaryExp, exp(a));
|
|||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
// Binary operators
|
// Binary operators
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
#define GridBinOpClass(name, combination) \
|
#define GridBinOpClass(name, combination) \
|
||||||
template <class left, class right> \
|
template <class left, class right> \
|
||||||
struct name { \
|
struct name { \
|
||||||
static auto inline func(const left &lhs, const right &rhs) \
|
static auto inline func(const left &lhs, const right &rhs) \
|
||||||
-> decltype(combination) const { \
|
-> decltype(combination) const { \
|
||||||
return combination; \
|
return combination; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
GridBinOpClass(BinaryAdd, lhs + rhs);
|
GridBinOpClass(BinaryAdd, lhs + rhs);
|
||||||
GridBinOpClass(BinarySub, lhs - rhs);
|
GridBinOpClass(BinarySub, lhs - rhs);
|
||||||
@ -271,20 +271,20 @@ GridBinOpClass(BinaryOrOr, lhs || rhs);
|
|||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
// Trinary conditional op
|
// Trinary conditional op
|
||||||
////////////////////////////////////////////////////
|
////////////////////////////////////////////////////
|
||||||
#define GridTrinOpClass(name, combination) \
|
#define GridTrinOpClass(name, combination) \
|
||||||
template <class predicate, class left, class right> \
|
template <class predicate, class left, class right> \
|
||||||
struct name { \
|
struct name { \
|
||||||
static auto inline func(const predicate &pred, const left &lhs, \
|
static auto inline func(const predicate &pred, const left &lhs, \
|
||||||
const right &rhs) -> decltype(combination) const { \
|
const right &rhs) -> decltype(combination) const { \
|
||||||
return combination; \
|
return combination; \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
GridTrinOpClass(
|
GridTrinOpClass(
|
||||||
TrinaryWhere,
|
TrinaryWhere,
|
||||||
(predicatedWhere<predicate, typename std::remove_reference<left>::type,
|
(predicatedWhere<predicate, typename std::remove_reference<left>::type,
|
||||||
typename std::remove_reference<right>::type>(pred, lhs,
|
typename std::remove_reference<right>::type>(pred, lhs,
|
||||||
rhs)));
|
rhs)));
|
||||||
|
|
||||||
////////////////////////////////////////////
|
////////////////////////////////////////////
|
||||||
// Operator syntactical glue
|
// Operator syntactical glue
|
||||||
@ -292,66 +292,66 @@ GridTrinOpClass(
|
|||||||
|
|
||||||
#define GRID_UNOP(name) name<decltype(eval(0, arg))>
|
#define GRID_UNOP(name) name<decltype(eval(0, arg))>
|
||||||
#define GRID_BINOP(name) name<decltype(eval(0, lhs)), decltype(eval(0, rhs))>
|
#define GRID_BINOP(name) name<decltype(eval(0, lhs)), decltype(eval(0, rhs))>
|
||||||
#define GRID_TRINOP(name) \
|
#define GRID_TRINOP(name) \
|
||||||
name<decltype(eval(0, pred)), decltype(eval(0, lhs)), decltype(eval(0, rhs))>
|
name<decltype(eval(0, pred)), decltype(eval(0, lhs)), decltype(eval(0, rhs))>
|
||||||
|
|
||||||
#define GRID_DEF_UNOP(op, name) \
|
#define GRID_DEF_UNOP(op, name) \
|
||||||
template <typename T1, \
|
template <typename T1, \
|
||||||
typename std::enable_if<is_lattice<T1>::value || \
|
typename std::enable_if<is_lattice<T1>::value || \
|
||||||
is_lattice_expr<T1>::value, \
|
is_lattice_expr<T1>::value, \
|
||||||
T1>::type * = nullptr> \
|
T1>::type * = nullptr> \
|
||||||
inline auto op(const T1 &arg) \
|
inline auto op(const T1 &arg) \
|
||||||
->decltype(LatticeUnaryExpression<GRID_UNOP(name), const T1 &>( \
|
->decltype(LatticeUnaryExpression<GRID_UNOP(name), const T1 &>( \
|
||||||
std::make_pair(GRID_UNOP(name)(), std::forward_as_tuple(arg)))) { \
|
std::make_pair(GRID_UNOP(name)(), std::forward_as_tuple(arg)))) { \
|
||||||
return LatticeUnaryExpression<GRID_UNOP(name), const T1 &>( \
|
return LatticeUnaryExpression<GRID_UNOP(name), const T1 &>( \
|
||||||
std::make_pair(GRID_UNOP(name)(), std::forward_as_tuple(arg))); \
|
std::make_pair(GRID_UNOP(name)(), std::forward_as_tuple(arg))); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GRID_BINOP_LEFT(op, name) \
|
#define GRID_BINOP_LEFT(op, name) \
|
||||||
template <typename T1, typename T2, \
|
template <typename T1, typename T2, \
|
||||||
typename std::enable_if<is_lattice<T1>::value || \
|
typename std::enable_if<is_lattice<T1>::value || \
|
||||||
is_lattice_expr<T1>::value, \
|
is_lattice_expr<T1>::value, \
|
||||||
T1>::type * = nullptr> \
|
T1>::type * = nullptr> \
|
||||||
inline auto op(const T1 &lhs, const T2 &rhs) \
|
inline auto op(const T1 &lhs, const T2 &rhs) \
|
||||||
->decltype( \
|
->decltype( \
|
||||||
LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
||||||
std::make_pair(GRID_BINOP(name)(), \
|
std::make_pair(GRID_BINOP(name)(), \
|
||||||
std::forward_as_tuple(lhs, rhs)))) { \
|
std::forward_as_tuple(lhs, rhs)))) { \
|
||||||
return LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
return LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
||||||
std::make_pair(GRID_BINOP(name)(), std::forward_as_tuple(lhs, rhs))); \
|
std::make_pair(GRID_BINOP(name)(), std::forward_as_tuple(lhs, rhs))); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GRID_BINOP_RIGHT(op, name) \
|
#define GRID_BINOP_RIGHT(op, name) \
|
||||||
template <typename T1, typename T2, \
|
template <typename T1, typename T2, \
|
||||||
typename std::enable_if<!is_lattice<T1>::value && \
|
typename std::enable_if<!is_lattice<T1>::value && \
|
||||||
!is_lattice_expr<T1>::value, \
|
!is_lattice_expr<T1>::value, \
|
||||||
T1>::type * = nullptr, \
|
T1>::type * = nullptr, \
|
||||||
typename std::enable_if<is_lattice<T2>::value || \
|
typename std::enable_if<is_lattice<T2>::value || \
|
||||||
is_lattice_expr<T2>::value, \
|
is_lattice_expr<T2>::value, \
|
||||||
T2>::type * = nullptr> \
|
T2>::type * = nullptr> \
|
||||||
inline auto op(const T1 &lhs, const T2 &rhs) \
|
inline auto op(const T1 &lhs, const T2 &rhs) \
|
||||||
->decltype( \
|
->decltype( \
|
||||||
LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
||||||
std::make_pair(GRID_BINOP(name)(), \
|
std::make_pair(GRID_BINOP(name)(), \
|
||||||
std::forward_as_tuple(lhs, rhs)))) { \
|
std::forward_as_tuple(lhs, rhs)))) { \
|
||||||
return LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
return LatticeBinaryExpression<GRID_BINOP(name), const T1 &, const T2 &>( \
|
||||||
std::make_pair(GRID_BINOP(name)(), std::forward_as_tuple(lhs, rhs))); \
|
std::make_pair(GRID_BINOP(name)(), std::forward_as_tuple(lhs, rhs))); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define GRID_DEF_BINOP(op, name) \
|
#define GRID_DEF_BINOP(op, name) \
|
||||||
GRID_BINOP_LEFT(op, name); \
|
GRID_BINOP_LEFT(op, name); \
|
||||||
GRID_BINOP_RIGHT(op, name);
|
GRID_BINOP_RIGHT(op, name);
|
||||||
|
|
||||||
#define GRID_DEF_TRINOP(op, name) \
|
#define GRID_DEF_TRINOP(op, name) \
|
||||||
template <typename T1, typename T2, typename T3> \
|
template <typename T1, typename T2, typename T3> \
|
||||||
inline auto op(const T1 &pred, const T2 &lhs, const T3 &rhs) \
|
inline auto op(const T1 &pred, const T2 &lhs, const T3 &rhs) \
|
||||||
->decltype( \
|
->decltype( \
|
||||||
LatticeTrinaryExpression<GRID_TRINOP(name), const T1 &, const T2 &, \
|
LatticeTrinaryExpression<GRID_TRINOP(name), const T1 &, const T2 &, \
|
||||||
const T3 &>(std::make_pair( \
|
const T3 &>(std::make_pair( \
|
||||||
GRID_TRINOP(name)(), std::forward_as_tuple(pred, lhs, rhs)))) { \
|
GRID_TRINOP(name)(), std::forward_as_tuple(pred, lhs, rhs)))) { \
|
||||||
return LatticeTrinaryExpression<GRID_TRINOP(name), const T1 &, const T2 &, \
|
return LatticeTrinaryExpression<GRID_TRINOP(name), const T1 &, const T2 &, \
|
||||||
const T3 &>(std::make_pair( \
|
const T3 &>(std::make_pair( \
|
||||||
GRID_TRINOP(name)(), std::forward_as_tuple(pred, lhs, rhs))); \
|
GRID_TRINOP(name)(), std::forward_as_tuple(pred, lhs, rhs))); \
|
||||||
}
|
}
|
||||||
////////////////////////
|
////////////////////////
|
||||||
// Operator definitions
|
// Operator definitions
|
||||||
@ -400,29 +400,29 @@ GRID_DEF_TRINOP(where, TrinaryWhere);
|
|||||||
/////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////
|
||||||
template <class Op, class T1>
|
template <class Op, class T1>
|
||||||
auto closure(const LatticeUnaryExpression<Op, T1> &expr)
|
auto closure(const LatticeUnaryExpression<Op, T1> &expr)
|
||||||
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second))))> {
|
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second))))> {
|
||||||
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second))))> ret(
|
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second))))> ret(
|
||||||
expr);
|
expr);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
template <class Op, class T1, class T2>
|
template <class Op, class T1, class T2>
|
||||||
auto closure(const LatticeBinaryExpression<Op, T1, T2> &expr)
|
auto closure(const LatticeBinaryExpression<Op, T1, T2> &expr)
|
||||||
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
||||||
eval(0, std::get<1>(expr.second))))> {
|
eval(0, std::get<1>(expr.second))))> {
|
||||||
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
||||||
eval(0, std::get<1>(expr.second))))>
|
eval(0, std::get<1>(expr.second))))>
|
||||||
ret(expr);
|
ret(expr);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
template <class Op, class T1, class T2, class T3>
|
template <class Op, class T1, class T2, class T3>
|
||||||
auto closure(const LatticeTrinaryExpression<Op, T1, T2, T3> &expr)
|
auto closure(const LatticeTrinaryExpression<Op, T1, T2, T3> &expr)
|
||||||
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
-> Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
||||||
eval(0, std::get<1>(expr.second)),
|
eval(0, std::get<1>(expr.second)),
|
||||||
eval(0, std::get<2>(expr.second))))> {
|
eval(0, std::get<2>(expr.second))))> {
|
||||||
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
Lattice<decltype(expr.first.func(eval(0, std::get<0>(expr.second)),
|
||||||
eval(0, std::get<1>(expr.second)),
|
eval(0, std::get<1>(expr.second)),
|
||||||
eval(0, std::get<2>(expr.second))))>
|
eval(0, std::get<2>(expr.second))))>
|
||||||
ret(expr);
|
ret(expr);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -433,33 +433,33 @@ auto closure(const LatticeTrinaryExpression<Op, T1, T2, T3> &expr)
|
|||||||
#undef GRID_DEF_UNOP
|
#undef GRID_DEF_UNOP
|
||||||
#undef GRID_DEF_BINOP
|
#undef GRID_DEF_BINOP
|
||||||
#undef GRID_DEF_TRINOP
|
#undef GRID_DEF_TRINOP
|
||||||
}
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
using namespace Grid;
|
using namespace Grid;
|
||||||
|
|
||||||
int main(int argc,char **argv){
|
int main(int argc,char **argv){
|
||||||
|
|
||||||
Lattice<double> v1(16);
|
Lattice<double> v1(16);
|
||||||
Lattice<double> v2(16);
|
Lattice<double> v2(16);
|
||||||
Lattice<double> v3(16);
|
Lattice<double> v3(16);
|
||||||
|
|
||||||
BinaryAdd<double,double> tmp;
|
BinaryAdd<double,double> tmp;
|
||||||
LatticeBinaryExpression<BinaryAdd<double,double>,Lattice<double> &,Lattice<double> &>
|
LatticeBinaryExpression<BinaryAdd<double,double>,Lattice<double> &,Lattice<double> &>
|
||||||
expr(std::make_pair(tmp,
|
expr(std::make_pair(tmp,
|
||||||
std::forward_as_tuple(v1,v2)));
|
std::forward_as_tuple(v1,v2)));
|
||||||
tmp.func(eval(0,v1),eval(0,v2));
|
tmp.func(eval(0,v1),eval(0,v2));
|
||||||
|
|
||||||
auto var = v1+v2;
|
auto var = v1+v2;
|
||||||
std::cout<<GridLogMessage<<typeid(var).name()<<std::endl;
|
std::cout<<GridLogMessage<<typeid(var).name()<<std::endl;
|
||||||
|
|
||||||
v3=v1+v2;
|
v3=v1+v2;
|
||||||
v3=v1+v2+v1*v2;
|
v3=v1+v2+v1*v2;
|
||||||
};
|
};
|
||||||
|
|
||||||
void testit(Lattice<double> &v1,Lattice<double> &v2,Lattice<double> &v3)
|
void testit(Lattice<double> &v1,Lattice<double> &v2,Lattice<double> &v3)
|
||||||
{
|
{
|
||||||
v3=v1+v2+v1*v2;
|
v3=v1+v2+v1*v2;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user