00001 // Copyright (C) 2002, 2003 EPITA Research and Development Laboratory 00002 // 00003 // This file is part of the Olena Library. This library is free 00004 // software; you can redistribute it and/or modify it under the terms 00005 // of the GNU General Public License version 2 as published by the 00006 // Free Software Foundation. 00007 // 00008 // This library is distributed in the hope that it will be useful, 00009 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00011 // General Public License for more details. 00012 // 00013 // You should have received a copy of the GNU General Public License 00014 // along with this library; see the file COPYING. If not, write to 00015 // the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00016 // Boston, MA 02110-1301, USA. 00017 // 00018 // As a special exception, you may use this file as part of a free 00019 // software library without restriction. Specifically, if other files 00020 // instantiate templates or use macros or inline functions from this 00021 // file, or you compile this file and link it with other files to 00022 // produce an executable, this file does not by itself cause the 00023 // resulting executable to be covered by the GNU General Public 00024 // License. This exception does not however invalidate any other 00025 // reasons why the executable file might be covered by the GNU General 00026 // Public License. 00027 00028 #ifndef NTG_ENUM_BUILTIN_BOOL_HH 00029 # define NTG_ENUM_BUILTIN_BOOL_HH 00030 00031 # include <ntg/core/abstract_hierarchy.hh> 00032 # include <ntg/real/behavior.hh> 00033 # include <ntg/core/predecls.hh> 00034 # include <ntg/core/type_traits.hh> 00035 00036 namespace ntg { 00037 00038 namespace internal { 00039 00040 /*-----------------. 00041 | typetraits<bool> | 00042 `-----------------*/ 00043 00044 template <> 00045 struct typetraits<bool> 00046 { 00047 typedef bool self; 00048 typedef binary abstract_type; 00049 typedef bin ntg_type; 00050 typedef optraits<self> optraits_type; 00051 typedef unsafe::get<self> behavior_type; 00052 00053 typedef self base_type; 00054 typedef self storage_type; 00055 typedef self cumul_type; 00056 typedef self largest_type; 00057 typedef self signed_largest_type; 00058 typedef self signed_cumul_type; 00059 typedef self unsigned_largest_type; 00060 typedef self unsigned_cumul_type; 00061 typedef unsigned int integer_type; 00062 }; 00063 00064 /*---------------. 00065 | optraits<bool> | 00066 `---------------*/ 00067 00068 template<> 00069 struct optraits<bool> 00070 { 00071 static bool min() { return 0; } 00072 static bool max() { return 1; } 00073 static bool zero() { return 0; } 00074 static bool unit() { return 1; } 00075 static bool inf() { return min(); } 00076 static bool sup() { return max(); } 00077 00078 static unsigned max_print_width () { return 1U; } 00079 00080 static std::string name() { return "bool"; } 00081 }; 00082 00083 } // end of internal. 00084 00085 } // end of ntg. 00086 00087 #endif // !NTG_ENUM_BUILTIN_BOOL_HH