TooN: internal/overfill_error.hh Source File

TooN 2.0.0-beta8

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List

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 }}