00001
00002
00003
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
00011
00012
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 }
00112
00113 #endif
00114