00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef BTK_UTILITY_TYPE_ID_TRAITS_HPP
00022 #define BTK_UTILITY_TYPE_ID_TRAITS_HPP
00023
00024 #include <limits>
00025
00026 namespace BTK {
00027 namespace UTILITY {
00028
00029 template <typename ID>
00030 struct TypeIDTraits
00031 {
00032 static const bool dynamic;
00033
00034 static ID first();
00035 static ID last();
00036 static ID unknown();
00037 static ID next(ID id);
00038 };
00039
00040 template <>
00041 struct TypeIDTraits<int>
00042 {
00043 static const bool dynamic = true;
00044
00045 static int first() { return 0; }
00046 static int last() { return std::numeric_limits<int>::max()-1; }
00047 static int unknown() { return std::numeric_limits<int>::max(); }
00048
00049 static int next(int id) { return ++id; }
00050 };
00051
00052 template <>
00053 struct TypeIDTraits<unsigned>
00054 {
00055 static const bool dynamic = true;
00056
00057 static unsigned first() { return std::numeric_limits<unsigned>::min(); }
00058 static unsigned last() { return std::numeric_limits<unsigned>::max()-1; }
00059 static unsigned unknown() { return std::numeric_limits<unsigned>::max(); }
00060
00061 static unsigned next(unsigned id) { return ++id; }
00062 };
00063
00064 }
00065 }
00066
00067 #endif