Skip to content

Commit

Permalink
* ArrayTraits, + IListTraits
Browse files Browse the repository at this point in the history
  • Loading branch information
Ubpa committed May 25, 2020
1 parent a860a44 commit 2f72d2e
Show file tree
Hide file tree
Showing 16 changed files with 55 additions and 63 deletions.
7 changes: 3 additions & 4 deletions include/UGM/bbox.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<bbox<T, N>> : ArrayTraits<point<T, N>, 2> {
using IList = TemplateList<IArrayUtil>;
using F = T;
};
struct ImplTraits<bbox<T, N>>
: ArrayTraits<point<T, N>, 2, T>,
IListTraits<IArrayUtil> {};

// axis-align bounding box
template<typename T, size_t N>
Expand Down
11 changes: 10 additions & 1 deletion include/UGM/detail/traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,18 @@
#include <UTemplate/SI.h>

namespace Ubpa {
template<typename T_, size_t N_>
template<typename T_, size_t N_, typename F_>
struct ArrayTraits {
using T = T_;
static constexpr size_t N = N_;
using F = F_;
};

template<typename T, size_t N>
struct Array1DTraits : ArrayTraits<T, N, T> {};

template<template<typename, typename>class... Interfaces>
struct IListTraits {
using IList = TemplateList<Interfaces...>;
};
}
7 changes: 3 additions & 4 deletions include/UGM/euler.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<euler<T>> : ArrayTraits<T, 3> {
using IList = TemplateList<IArray1D_Util>;
using F = T;
};
struct ImplTraits<euler<T>>
: Array1DTraits<T, 3>,
IListTraits<IArray1D_Util> {};

// same with Unity3D
// Z -> X -> Y
Expand Down
3 changes: 1 addition & 2 deletions include/UGM/line.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ namespace Ubpa {
struct line;

template<typename T, size_t N>
struct ImplTraits<line<T, N>> {
using IList = TemplateList<IInOut, ILine>;
struct ImplTraits<line<T, N>> : IListTraits<IInOut, ILine> {
using V = vec<T, N>;
using P = point<T, N>;
using F = T;
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/mat.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<mat<T, N>> : ArrayTraits<vec<T, N>, N> {
using IList = TemplateList<IMatrixInOut, IMatrixMul, IArrayLinear, IRing>;
using F = T;
};
struct ImplTraits<mat<T, N>>
: ArrayTraits<vec<T, N>, N, T>,
IListTraits<IMatrixInOut, IMatrixMul, IArrayLinear, IRing>{};

template<typename T, size_t N>
struct mat : SI<mat<T, N>> {
Expand Down
3 changes: 1 addition & 2 deletions include/UGM/plane.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,7 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<plane<T>> {
using IList = TemplateList<IInOut, IPlane>;
struct ImplTraits<plane<T>> : IListTraits<IInOut, IPlane> {
using V = vec<T, 3>;
using P = point<T, 3>;
using F = T;
Expand Down
7 changes: 4 additions & 3 deletions include/UGM/point.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<point<T, N>> : ArrayTraits<T, N> {
using IList = TemplateList<IArray1D_Util, IEuclideanA>;
using F = T;
struct ImplTraits<point<T, N>>
: Array1DTraits<T, N>,
IListTraits<IArray1D_Util, IEuclideanA>
{
using V = vec<T, N>;
};

Expand Down
7 changes: 3 additions & 4 deletions include/UGM/quat.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<quat<T>> : ArrayTraits<T, 4> {
using IList = TemplateList<IMul, IArrayUtil>;
using F = T;
};
struct ImplTraits<quat<T>>
: Array1DTraits<T, 4>,
IListTraits<IMul, IArrayUtil> {};

template<typename T>
struct quat : SI<quat<T>> {
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/rgb.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<rgb<T>> : ArrayTraits<T, 3> {
using IList = TemplateList<IArray1D_Util, IArrayHadamardProduct, IArrayLinear>;
using F = T;
};
struct ImplTraits<rgb<T>>
: Array1DTraits<T, 3>,
IListTraits<IArray1D_Util, IArrayHadamardProduct, IArrayLinear> {};

template<typename T>
struct rgb : SI<rgb<T>> {
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/rgba.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<rgba<T>> : ArrayTraits<T, 4> {
using IList = TemplateList<IArray1D_Util>;
using F = T;
};
struct ImplTraits<rgba<T>>
: Array1DTraits<T, 4>,
IListTraits<IArray1D_Util> {};

template<typename T>
struct rgba : SI<rgba<T>> {
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/scale.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,9 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<scale<T, N>> : ArrayTraits<T, N> {
using IList = TemplateList<IArray1D_Util, IArrayHadamardProduct, IArrayScalarMul>;
using F = T;
};
struct ImplTraits<scale<T, N>>
: Array1DTraits<T, N>,
IListTraits<IArray1D_Util, IArrayHadamardProduct, IArrayScalarMul> {};

template<typename T, size_t N>
struct scale : SI<scale<T, N>> {
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/svec.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<svec<T>> : ArrayTraits<T, 3> {
using IList = TemplateList<IArray1D_Util, ICross>;
using F = T;
};
struct ImplTraits<svec<T>>
: Array1DTraits<T, 3>,
IListTraits<IArray1D_Util, ICross> {};

// vector in surface coordinate system (right-hand)
// most functions assert(normalized())
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/transform.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,9 @@

namespace Ubpa {
template<typename T>
struct ImplTraits<transform<T>> : ArrayTraits<vec<T, 4>, 4> {
using IList = TemplateList<IMatrixInOut, IMatrixMul>;
using F = T;
};
struct ImplTraits<transform<T>>
: ArrayTraits<vec<T, 4>, 4, T>,
IListTraits<IMatrixInOut, IMatrixMul> {};

// TODO: distinguish different kinds of transformations
// - basic transformation: translation, reflection, rotation, scaling, shearing, projection (projective transformation)
Expand Down
10 changes: 3 additions & 7 deletions include/UGM/triangle.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@

namespace Ubpa {
template<typename T, size_t N>
struct triangle;

template<typename T, size_t N>
struct ImplTraits<triangle<T, N>> : ArrayTraits<point<T, N>, 3> {
using IList = TemplateList<IArrayInOut>;
using F = T;
};
struct ImplTraits<triangle<T, N>>
: ArrayTraits<point<T, N>, 3, T>,
IListTraits<IArrayInOut> {};

template<typename T, size_t N>
struct triangle : SI<triangle<T, N>> {
Expand Down
7 changes: 3 additions & 4 deletions include/UGM/val.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,9 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<val<T, N>> : ArrayTraits<T, N> {
using IList = TemplateList<IArrayLinear, IArrayHadamardProduct, IArray1D_Util>;
using F = T;
};
struct ImplTraits<val<T, N>>
: Array1DTraits<T, N>,
IListTraits<IArrayLinear, IArrayHadamardProduct, IArray1D_Util> {};

template<typename T, size_t N>
struct val : SI<val<T, N>> {
Expand Down
14 changes: 6 additions & 8 deletions include/UGM/vec.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,14 @@

namespace Ubpa {
template<typename T, size_t N>
struct ImplTraits<vec<T, N>> : ArrayTraits<T, N> {
using IList = TemplateList<IArray1D_Util, IEuclideanV>;
using F = T;
};
struct ImplTraits<vec<T, N>>
: Array1DTraits<T, N>,
IListTraits<IArray1D_Util, IEuclideanV> {};

template<typename T>
struct ImplTraits<vec<T, 3>> : ArrayTraits<T, 3> {
using IList = TemplateList<IArray1D_Util, ICross>;
using F = T;
};
struct ImplTraits<vec<T, 3>>
: Array1DTraits<T, 3>,
IListTraits<IArray1D_Util, ICross> {};

template<typename T, size_t N>
struct vec : SI<vec<T, N>> {
Expand Down

0 comments on commit 2f72d2e

Please sign in to comment.