IpolDelimiter.hpp

00001 
00002 //
00003 // $Id: IpolDelimiter.hpp,v 1.3 2008/01/14 19:05:50 werner Exp $
00004 //
00006 #ifndef __IPOL_INTERPOLATION_TRAIT_HPP
00007 #define __IPOL_INTERPOLATION_TRAIT_HPP "Created 11.06.2004 22:28:21 by bzfbenge"
00008 
00009 /*
00010  Do NOT include math.h, because this is incompatible
00011  with the Intel's math header file that is used by VecAl.hpp!
00012 #include <math.h>
00013 */
00014 
00015 #include "Index.hpp"
00016 
00017 namespace Fiber
00018 {
00019 
00036 template <class Type>
00037         class   NoDelimiter
00038 {
00039 public:
00040 
00041 static  const Type&limit(const Type&T)
00042         {
00043                 return T;
00044         }
00045 };
00046 
00047 
00048 #if 0
00049 
00052 class   ConstantBoundary
00053 {
00054 public:
00055 
00056 static  index_t left(index_t i, index_t size)
00057         {
00058                 if (i<0 || i>=size) return 0;
00059                 return i;
00060         }
00061 
00062 static  index_t right(index_t i, index_t size)
00063         {
00064                 if (i<0 || i>=size) return size;
00065                 return i;
00066         }
00067 };
00068 
00072 class   PeriodicBoundary
00073 {
00074 public:
00075 static  index_t left(index_t i, index_t size)
00076         {
00077                 if (i>=size) return i % size;
00078                 if (i<0)     return i % size + size;
00079                 return i;
00080         }
00081 
00082 static  index_t right(index_t i, index_t size)
00083         {
00084                 return left(i,size);
00085         }
00086 };
00087 
00091 class   ReflectedBoundary
00092 {
00093 public:
00094 static  index_t left(index_t i, index_t size)
00095         {
00096                 if (i>=2*size) i %= 2*size;
00097                 if (i>=size) return size-i;
00098                 if (i<size ) i %= 2*size;
00099                 if (i<0)     return size+i;
00100                 return i;
00101         }
00102 
00103 static  index_t right(index_t i, index_t size)
00104         {
00105                 return left(i,size);
00106         }
00107 };
00108 #endif
00109 
00110 
00111 } /* namespace Fiber */ 
00112 
00113 #endif /* __IPOL_INTERPOLATION_TRAIT_HPP */
00114