メインページ | モジュール | 名前空間一覧 | クラス階層 | 構成 | ファイル一覧 | 名前空間メンバ | 構成メンバ | ファイルメンバ | 関連ページ

toppers/assert.hpp

解説を見る。
00001 /*
00002  *  TOPPERS/C++ API Template Library
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      C++ API Template Library
00005  *
00006  *  Copyright (C) 2004 by TAKAGI Nobuhisa
00007  *
00008  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
00009  *  によって公表されている GNU General Public License の Version 2 に記
00010  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00011  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00012  *  利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  *
00030  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00031  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00032  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00033  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00034  *
00035  *  @(#) $Id: assert.hpp,v 1.1.1.1 2004/04/14 09:30:27 takagi-n Exp $
00036  */
00037 
00050 #ifndef TOPPERS_ASSERT_HPP_
00051 #define TOPPERS_ASSERT_HPP_
00052 
00053 #include <toppers/config.hpp>
00054 
00055 #define TOPPERS_JOIN(a, b)    TOPPERS_JOIN_(a, b)
00056 #define TOPPERS_JOIN_(a, b)   a ## b
00057 
00058 #define TOPPERS_STRINGIFY(a)  TOPPERS_STRINGIFY_(a)
00059 #define TOPPERS_STRINGIFY_(a) # a
00060 
00061 namespace toppers
00062 {
00063 
00064     template <bool> struct static_assertion
00065     {
00066         enum { okay = 1 };
00067     };
00068 
00069     template <> struct static_assertion<false> {};
00070 
00071     namespace detail
00072     {
00073         int assertion_failed(const char* expr, const char* file, int line) throw();
00074     }
00075 
00076 }
00077 
00096 #if TKERNEL_MAKER == 0x0118 || defined(assert)
00097 #define TOPPERS_ASSERT          assert
00098 #elif   !defined(NDEBUG)
00099 #define TOPPERS_ASSERT(expr)    ((void)((expr) ? 0 : ::toppers::detail::assertion_failed(#expr, __FILE__, __LINE__)))
00100 #else
00101 #define TOPPERS_ASSERT(expr)    ((void)0)
00102 #endif
00103 
00116 #define TOPPERS_STATIC_ASSERT(expr) typedef int TOPPERS_JOIN(toppers_diagnostics_, __LINE__)[toppers::static_assertion<!!(expr)>::okay]
00117 
00118 #endif  // ! TOPPERS_ASSERT_HPP_