Menu

OverflowErrorChecking.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *
00003  * Copyright (c) 2009-2010 Philipp Werner <philipp.werner@st.ovgu.de>
00004  * All rights reserved.
00005  *
00006  *    Redistribution and use in source and binary forms, with or without
00007  *    modification, are permitted provided that the following conditions
00008  *    are met:
00009  *
00010  *    * Redistributions of source code must retain the above copyright
00011  *      notice, this list of conditions and the following disclaimer.
00012  *
00013  *    * Redistributions in binary form must reproduce the above copyright
00014  *      notice, this list of conditions and the following disclaimer in
00015  *      the documentation and/or other materials provided with the
00016  *      distribution.
00017  *
00018  *    * Neither the name of the copyright holders nor the names of
00019  *      contributors may be used to endorse or promote products derived
00020  *      from this software without specific prior written permission.
00021  *
00022  *
00023  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00024  *    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00025  *    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00026  *    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027  *    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028  *    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029  *    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030  *    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031  *    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032  *    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  *    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  *
00036  * $Id$
00037  *
00038  ******************************************************************************/
00039 
00040 
00041 #ifndef __OVERFLOWERRORCHECKING_H_2C2F23FF1575C2__
00042 #define __OVERFLOWERRORCHECKING_H_2C2F23FF1575C2__
00043 
00044 
00045 namespace famouso {
00046     namespace mw {
00047         namespace afp {
00048             namespace shared {
00049 
00050 
00061                 class OverflowErrorChecking {
00062 
00063                         bool err;
00064 
00065                     public:
00067                         OverflowErrorChecking() : err(false) {
00068                         }
00069 
00071                         bool error() {
00072                             return err;
00073                         }
00074 
00075 
00079                         template <class T1, class T2>
00080                         void check_smaller(T1 v1, T2 v2) {
00081                             if (!err)
00082                                 err = (v1 >= v2);
00083                         }
00084 
00088                         template <class T1, class T2>
00089                         void check_smaller_or_equal(T1 v1, T2 v2) {
00090                             if (!err)
00091                                 err = (v1 > v2);
00092                         }
00093 
00097                         template <class T1, class T2>
00098                         void check_equal(T1 v1, T2 v2) {
00099                             if (!err)
00100                                 err = (v1 != v2);
00101                         }
00102 
00104                         void set_error() {
00105                             err = true;
00106                         }
00107 
00109                         void reset() {
00110                             err = false;
00111                         }
00112                 };
00113 
00114 
00125                 class NoOverflowErrorChecking {
00126 
00127                     public:
00129                         NoOverflowErrorChecking() {
00130                         }
00131 
00133                         bool error() {
00134                             return false;
00135                         }
00136 
00137 
00141                         template <class T1, class T2>
00142                         void check_smaller(T1 v1, T2 v2) {
00143                         }
00144 
00148                         template <class T1, class T2>
00149                         void check_smaller_or_equal(T1 v1, T2 v2) {
00150                         }
00151 
00155                         template <class T1, class T2>
00156                         void check_equal(T1 v1, T2 v2) {
00157                         }
00158 
00160                         void set_error() {
00161                         }
00162 
00164                         void reset() {
00165                         }
00166                 };
00167 
00168 
00169             } // namespace shared
00170         } // namespace afp
00171     } // namespace mw
00172 } // namespace famouso
00173 
00174 
00175 #endif // __OVERFLOWERRORCHECKING_H_2C2F23FF1575C2__
00176