00001 namespace TooN{ 00002 namespace Internal{ 00003 00004 template<bool b> struct overfill; 00005 template<> struct overfill<0>{}; 00006 00007 template<int N, int Size> struct CheckOverFill 00008 { 00009 static void check(int) 00010 { 00011 #ifdef TOON_TEST_INTERNALS 00012 if(N >= Size) 00013 throw StaticVectorOverfill(); 00014 #else 00015 Internal::overfill<(N>=Size)> overfilled_vector; 00016 #endif 00017 }; 00018 }; 00019 00020 template<int N> struct CheckOverFill<N, -1> 00021 { 00022 static void check(int s) 00023 { 00024 #ifdef TOON_TEST_INTERNALS 00025 if(N >= s) 00026 throw VectorOverfill(); 00027 #elif !defined TOON_NDEBUG_FILL 00028 if(N >= s) 00029 { 00030 std::cerr << "TooN overfilled vector" << std::endl; 00031 std::abort(); 00032 } 00033 #endif 00034 }; 00035 }; 00036 00037 00038 template<int N, int R, int C, bool IsDynamic=(R==-1||C==-1)> struct CheckMOverFill 00039 { 00040 static void check(int) 00041 { 00042 #ifdef TOON_TEST_INTERNALS 00043 if(N >= R*C) 00044 throw StaticMatrixOverfill(); 00045 #else 00046 Internal::overfill<(N>=R*C)> overfilled_matrix; 00047 #endif 00048 } 00049 }; 00050 00051 template<int N, int R, int C> struct CheckMOverFill<N, R, C, 1> 00052 { 00053 static void check(int s) 00054 { 00055 #ifdef TOON_TEST_INTERNALS 00056 if(N >= s) 00057 throw StaticMatrixOverfill(); 00058 #else 00059 if(N >= s) 00060 { 00061 std::cerr << "TooN overfilled matrix" << std::endl; 00062 std::abort(); 00063 } 00064 #endif 00065 } 00066 }; 00067 00068 }}