BWAPI
SPAR/AIModule/Utils/Utils.h
Go to the documentation of this file.
00001 #pragma once
00002 
00003 //------------------------------------------------------------------------------
00004 // Compile-time assertions
00005 //------------------------------------------------------------------------------
00006 template<bool> struct static_assert;
00007 template<> struct static_assert<true> { };
00008 
00009 //------------------------------------------------------------------------------
00010 // Unused variable (remove compilation warnings)
00011 //------------------------------------------------------------------------------
00012 template<class T> void unused(const T&) { }
00013 
00014 //------------------------------------------------------------------------------
00015 // Static selector
00016 //------------------------------------------------------------------------------
00017 template<bool Cond, class TrueType, class FalseType> struct static_if_else;
00018 
00019 template<class TrueType, class FalseType>
00020 struct static_if_else<true,TrueType,FalseType>  { typedef TrueType type; };
00021 
00022 template<class TrueType, class FalseType>
00023 struct static_if_else<false,TrueType,FalseType> { typedef FalseType type; };
00024 
00025 //------------------------------------------------------------------------------
00026 // Boolean type wrappers
00027 //------------------------------------------------------------------------------
00028 struct true_type { enum { value = true }; };
00029 struct false_type { enum { value = false }; };
00030 
00031 //------------------------------------------------------------------------------
00032 // Compare two types (use boost::is_same instead)
00033 //------------------------------------------------------------------------------
00034 //template<class T, class U>
00035 //struct boost::is_same : false_type { };
00036 //
00037 //template<class T>
00038 //struct boost::is_same<T,T> : true_type { };
00039 
00040 //------------------------------------------------------------------------------
00041 // Templated empty class (with a lot of useless generic constructors!)
00042 //------------------------------------------------------------------------------
00043 template <class T>
00044 struct empty
00045 {
00046   empty(){}
00047   template <class T1> empty(const T1&) {}
00048   template <class T1, class T2> empty(const T1&, const T2&) {}
00049   template <class T1, class T2, class T3> empty(const T1&, const T2&, const T3&) {}
00050   template <class T1, class T2, class T3, class T4> empty(const T1&, const T2&, const T3&, const T4&) {}
00051   template <class T1, class T2, class T3, class T4, class T5> empty(const T1&, const T2&, const T3&, const T4& t4, const T5&) {}
00052 };
00053 
00054 //------------------------------------------------------------------------------
00055 // Prevents taking the size of a pointer type
00056 //------------------------------------------------------------------------------
00057 // Use (sizeof array_size(a)) instead of (sizeof a / sizeof *a)
00058 template<typename T, size_t N> size_t array_size(T(&)[N])
00059 {
00060   return N;
00061 }
00062 
00063 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines