42 lines
1.6 KiB
C
42 lines
1.6 KiB
C
/* { dg-do compile } */
|
|
|
|
namespace std __attribute__ ((__visibility__ ("default"))) {
|
|
template<typename _Tp> class new_allocator { };
|
|
template<typename _Tp> class allocator: public new_allocator<_Tp> { };
|
|
template<typename _Tp, typename _Alloc> struct _Vector_base { };
|
|
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
|
|
class vector : protected _Vector_base<_Tp, _Alloc> { };
|
|
};
|
|
template<int Dim> class Vector { };
|
|
enum CenteringType { VertexType, EdgeType, FaceType, CellType };
|
|
enum ContinuityType { XDim = 1, YDim = XDim << 1, ZDim = YDim << 1 };
|
|
template <int Dim> class Centering {
|
|
public:
|
|
typedef Vector<Dim> Position;
|
|
typedef std::vector<Position> Positions;
|
|
Centering(const Positions &positions);
|
|
Positions positions_m;
|
|
};
|
|
template <int Dim> class CanonicalCentering {
|
|
CanonicalCentering();
|
|
template <class T> static T combine(const T &op1, const T &op2);
|
|
static Centering<Dim>*** centering_table_m;
|
|
};
|
|
template <int Dim> CanonicalCentering<Dim>::CanonicalCentering()
|
|
{
|
|
typename Centering<Dim>::Positions positions[Dim][2];
|
|
enum { x = 0, y, z };
|
|
int cont = 0;
|
|
if (Dim > 1)
|
|
{
|
|
centering_table_m[EdgeType][cont][YDim] = Centering<Dim>(positions[y][cont]);
|
|
centering_table_m[EdgeType][cont][XDim|YDim] = Centering<Dim>(combine(positions[x][cont], positions[y][cont]));
|
|
}
|
|
if (Dim > 2)
|
|
{
|
|
centering_table_m[EdgeType][cont][ZDim] = Centering<Dim>(positions[z][cont]);
|
|
centering_table_m[EdgeType][cont][XDim|ZDim] = Centering<Dim>(combine(positions[x][cont], positions[z][cont]));
|
|
}
|
|
}
|
|
template class CanonicalCentering<2>;
|