include/wipal/tool/static_base.hh

Go to the documentation of this file.
00001 /*
00002  * WiPal - A library and a set of tools to manipulate wireless traces.
00003  * Copyright (C) 2007  Universite Pierre et Marie Curie - Paris 6
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
00018  * MA  02110-1301  USA
00019  *
00020  * Author: Thomas Claveirole <thomas.claveirole@lip6.fr>
00021  */
00022 #ifndef TOOL_STATIC_BASE_HH_
00023 # define TOOL_STATIC_BASE_HH_
00024 
00033 
00034 namespace tool
00035 {
00036 
00042   struct bottom
00043   {
00044   };
00045 
00051   struct undefined_type
00052   {
00053   };
00054 
00065   template <class Down, class Up>
00066   struct get_exact
00067   {
00068     typedef Down return_type; 
00069   };
00070 
00075   template <class Up>
00076   struct get_exact<bottom, Up>
00077   {
00078     typedef Up return_type; 
00079   };
00080 
00081 # define wp_get_exact(Down, Up...)                      \
00082   typename ::tool::get_exact<Down, Up>::return_type
00083 
00152   template <class Bottom>
00153   struct static_base
00154   {
00159     typedef wp_get_exact(Bottom, static_base<Bottom>)   exact_type;
00160 
00162 
00163 
00164 
00166     const exact_type&   exact() const;
00167 
00169     exact_type&         exact();
00170 
00172     const exact_type*   exact_ptr() const;
00173 
00175     exact_type*         exact_ptr();
00177   };
00178 
00179 # define wp_inherit(Class, Parent...) Class<wp_get_exact(Bottom, Parent)>
00180 
00220   template <class Type>
00221   struct types
00222   {
00223   };
00224 
00225 # define wp_type(Type, Base...) typename ::tool::types<Base>::Type
00226 
00227 } // End of namespace tool.
00228 
00229 # include "static_base.hxx"
00230 
00231 #endif // ! TOOL_STATIC_BASE_HH_

Generated on Wed Jan 16 16:15:14 2008 for wipal by  doxygen 1.5.4