9#include <kernel/shape.hpp> 
   30      class FaceIndexMapping;
 
   32      class FaceIndexMapping
 
   35        static int map(
int cell, 
int face);
 
   40      class FaceIndexMapping<Shape::Simplex<2>, 1, 0>
 
   43        static int map(
int cell, 
int face)
 
   45          ASSERTM((0 <= cell) && (cell < 3), 
"invalid cell index");
 
   46          ASSERTM((0 <= face) && (face < 2), 
"invalid face index");
 
   47          static const int indices[3][2] =
 
   53          return indices[cell][face];
 
   58      class FaceIndexMapping<Shape::Simplex<3>, 1, 0>
 
   61        static int map(
int cell, 
int face)
 
   63          ASSERTM((0 <= cell) && (cell < 6), 
"invalid cell index");
 
   64          ASSERTM((0 <= face) && (face < 2), 
"invalid face index");
 
   65          static const int indices[6][2] =
 
   74          return indices[cell][face];
 
   79      class FaceIndexMapping<Shape::Simplex<3>, 2, 0>
 
   82        static int map(
int cell, 
int face)
 
   84          ASSERTM((0 <= cell) && (cell < 4), 
"invalid cell index");
 
   85          ASSERTM((0 <= face) && (face < 3), 
"invalid face index");
 
   86          static const int indices[4][3] =
 
   93          return indices[cell][face];
 
   98      class FaceIndexMapping<Shape::Simplex<3>, 2, 1>
 
  101        static int map(
int cell, 
int face)
 
  103          ASSERTM((0 <= cell) && (cell < 4), 
"invalid cell index");
 
  104          ASSERTM((0 <= face) && (face < 3), 
"invalid face index");
 
  105          static const int indices[4][3] =
 
  112          return indices[cell][face];
 
  117      class FaceIndexMapping<Shape::Hypercube<2>, 1, 0>
 
  120        static int map(
int cell, 
int face)
 
  122          ASSERTM((0 <= cell) && (cell < 4), 
"invalid cell index");
 
  123          ASSERTM((0 <= face) && (face < 2), 
"invalid face index");
 
  124          static const int indices[4][2] =
 
  131          return indices[cell][face];
 
  136      class FaceIndexMapping<Shape::Hypercube<3>, 1, 0>
 
  139        static int map(
int cell, 
int face)
 
  141          ASSERTM((0 <= cell) && (cell < 12), 
"invalid cell index");
 
  142          ASSERTM((0 <= face) && (face < 2), 
"invalid face index");
 
  143          static const int indices[12][2] =
 
  158          return indices[cell][face];
 
  163      class FaceIndexMapping<Shape::Hypercube<3>, 2, 0>
 
  166        static int map(
int cell, 
int face)
 
  168          ASSERTM((0 <= cell) && (cell < 6), 
"invalid cell index");
 
  169          ASSERTM((0 <= face) && (face < 4), 
"invalid face index");
 
  170          static const int indices[6][4] =
 
  179          return indices[cell][face];
 
  184      class FaceIndexMapping<Shape::Hypercube<3>, 2, 1>
 
  187        static int map(
int cell, 
int face)
 
  189          ASSERTM((0 <= cell) && (cell < 6), 
"invalid cell index");
 
  190          ASSERTM((0 <= face) && (face < 4), 
"invalid face index");
 
  191          static const int indices[6][4] =
 
  200          return indices[cell][face];
 
#define ASSERTM(expr, msg)
Debug-Assertion macro definition with custom message.