TooN 2.1
internal/overfill_error.hh
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)>();
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 }}