TypeTraits.H

Go to the documentation of this file.
00001 /*!@file Util/TypeTraits.H Template approach to getting compile-time
00002  information about types.*/
00003 
00004 // //////////////////////////////////////////////////////////////////// //
00005 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2001 by the //
00006 // University of Southern California (USC) and the iLab at USC.         //
00007 // See http://iLab.usc.edu for information about this project.          //
00008 // //////////////////////////////////////////////////////////////////// //
00009 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00010 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00011 // in Visual Environments, and Applications'' by Christof Koch and      //
00012 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00013 // pending; application number 09/912,225 filed July 23, 2001; see      //
00014 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00015 // //////////////////////////////////////////////////////////////////// //
00016 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00017 //                                                                      //
00018 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00019 // redistribute it and/or modify it under the terms of the GNU General  //
00020 // Public License as published by the Free Software Foundation; either  //
00021 // version 2 of the License, or (at your option) any later version.     //
00022 //                                                                      //
00023 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00024 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00025 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00026 // PURPOSE.  See the GNU General Public License for more details.       //
00027 //                                                                      //
00028 // You should have received a copy of the GNU General Public License    //
00029 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00030 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00031 // Boston, MA 02111-1307 USA.                                           //
00032 // //////////////////////////////////////////////////////////////////// //
00033 //
00034 // Primary maintainer for this file: Rob Peters <rjpeters@klab.caltech.edu>
00035 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/Util/TypeTraits.H $
00036 // $Id: TypeTraits.H 4663 2005-06-23 17:47:28Z rjpeters $
00037 //
00038 
00039 #ifndef TYPETRAITS_H_DEFINED
00040 #define TYPETRAITS_H_DEFINED
00041 
00042 //! The generic TypeTraits implementation.
00043 /*! This template struct can be specialized or partially specialized
00044     for other user-defined types. In general, the approach should be
00045     that the generic version makes the most conservative
00046     specifications, and that specializations can make more aggressive
00047     specifications. That way, if we forget to specialize for a given
00048     type, we might risk missing some optimization, but won't risk
00049     breaking the program. */
00050 template <class T>
00051 struct TypeTraits
00052 {
00053   //! Whether the type is trivial (either builtin or a plain-old-data struct).
00054   /*! This will be used to determine whether objects of the type can
00055       safely be handled as raw memory; that is, whether they can be
00056       initialized with memset(), copied with memcpy(), and don't have
00057       to have their destructors run, etc. Any of the builtin types
00058       meet these criteria, as well as any user-defined plain-old-data
00059       (POD) type. A POD type must have members that are all either
00060       builtin types or other POD types, and must not have a
00061       user-defined destqructor, copy constructor, or assignment
00062       operator. It <b>can</b> have user-defined constructors. */
00063   enum { isTrivial = 0 };
00064 };
00065 
00066 template <> struct TypeTraits<bool>           { enum { isTrivial = 1 }; };
00067 
00068 template <> struct TypeTraits<char>           { enum { isTrivial = 1 }; };
00069 template <> struct TypeTraits<unsigned char>  { enum { isTrivial = 1 }; };
00070 template <> struct TypeTraits<short>          { enum { isTrivial = 1 }; };
00071 template <> struct TypeTraits<unsigned short> { enum { isTrivial = 1 }; };
00072 template <> struct TypeTraits<int>            { enum { isTrivial = 1 }; };
00073 template <> struct TypeTraits<unsigned int>   { enum { isTrivial = 1 }; };
00074 template <> struct TypeTraits<long>           { enum { isTrivial = 1 }; };
00075 template <> struct TypeTraits<unsigned long>  { enum { isTrivial = 1 }; };
00076 
00077 template <> struct TypeTraits<float>          { enum { isTrivial = 1 }; };
00078 template <> struct TypeTraits<double>         { enum { isTrivial = 1 }; };
00079 template <> struct TypeTraits<long double>    { enum { isTrivial = 1 }; };
00080 
00081 // ######################################################################
00082 /* So things look consistent in everyone's emacs... */
00083 /* Local Variables: */
00084 /* indent-tabs-mode: nil */
00085 /* End: */
00086 
00087 #endif // !TYPETRAITS_H_DEFINED
Generated on Sun May 8 08:42:32 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3