1 #ifndef DOZERG_TEMPLATE_H_20091226 2 #define DOZERG_TEMPLATE_H_20091226 17 #include "impl/template_impl.hh" 22 template<
typename Integer>
25 typedef NS_IMPL::CFalseType __IsInteger;
26 static const bool kCanMemcpy =
false;
27 static const bool kIsChar =
false;
33 typedef NS_IMPL::CFalseType __IsInteger;
34 typedef T * __Unsigned;
35 static const bool kCanMemcpy =
true;
36 static const int kMaxBits =
sizeof(T *) * 8;
42 typedef NS_IMPL::CTrueType __IsInteger;
43 static const bool kCanMemcpy =
true;
44 static const int kMaxBits =
sizeof(wchar_t) * 8;
50 typedef NS_IMPL::CTrueType __IsInteger;
51 static const bool kCanMemcpy =
true;
52 static const int kMaxBits =
sizeof(bool) * 8;
55 #define __INTEGER_TRAITS_FOR_POD(TYPE, IS_CHAR, SIGNED, UNSIGNED) template<>struct CTypeTraits<TYPE>{ \ 56 typedef NS_IMPL::CTrueType __IsInteger; \ 57 typedef SIGNED __Signed; \ 58 typedef UNSIGNED __Unsigned; \ 59 static const bool kCanMemcpy = true; \ 60 static const bool kIsChar = IS_CHAR; \ 61 static const int kMaxBits = sizeof(TYPE) * 8; \ 64 __INTEGER_TRAITS_FOR_POD(
char,
true,
char,
unsigned char);
65 __INTEGER_TRAITS_FOR_POD(
signed char,
true,
signed char,
unsigned char);
66 __INTEGER_TRAITS_FOR_POD(
unsigned char,
true,
signed char,
unsigned char);
67 __INTEGER_TRAITS_FOR_POD(
short,
false,
short,
unsigned short);
68 __INTEGER_TRAITS_FOR_POD(
unsigned short,
false,
short,
unsigned short);
69 __INTEGER_TRAITS_FOR_POD(
int,
false,
int,
unsigned int);
70 __INTEGER_TRAITS_FOR_POD(
unsigned int,
false,
int,
unsigned int);
71 __INTEGER_TRAITS_FOR_POD(
long,
false,
long,
unsigned long);
72 __INTEGER_TRAITS_FOR_POD(
unsigned long,
false,
long,
unsigned long);
73 __INTEGER_TRAITS_FOR_POD(
long long,
false,
long long,
unsigned long long);
74 __INTEGER_TRAITS_FOR_POD(
unsigned long long,
false,
long long,
unsigned long long);
76 #undef __INTEGER_TRAITS_FOR_POD 79 template<
typename T,
size_t N>
85 inline static T swap(T a){
return a;}
91 inline static T swap(T a){
return bswap_16(a);}
97 inline static T swap(T a){
return bswap_32(a);}
103 inline static T swap(T a){
return bswap_64(a);}
111 typedef T result_type;
117 typedef T result_type;
123 typedef T result_type;
129 typedef T result_type;
133 #define ARRAY_SIZE(a) sizeof(NS_SERVER::NS_IMPL::__array_size(a)) 139 #define STATIC_ASSERT( expr ) __STATIC_ASSERT( JOIN_TOKEN(compile_assert_failed_at_line_, __LINE__), (expr) ) 142 #define CHECK_TYPE_SIZE( type, size ) __STATIC_ASSERT( size_of_type_is_not_##size, sizeof(type) == (size) ) 146 #define CHECK_MEM_OFFSET(type, member, value) __STATIC_ASSERT(offset_of_##member##_in_##type##_is_##value, __builtin_offsetof(type, member) == size_t(value)) 150 template<
class T1,
class T2,
bool Sel>
156 template<
class T1,
class T2>
159 typedef T2 result_type;
167 T & operator()(T & v)
const{
return v;}
168 const T & operator()(
const T & v)
const{
return v;}
174 struct CHashFn:
public std::unary_function<Key, size_t>{};
176 #define __HASH_FUNCIONT_FOR_TYPE(TYPE, HASH) \ 177 template<>struct CHashFn<TYPE> : public std::unary_function<TYPE, size_t>{ \ 178 size_t operator()(TYPE v) const{return (HASH);}} 180 __HASH_FUNCIONT_FOR_TYPE(
char *, NS_IMPL::__stl_hash_string(v));
181 __HASH_FUNCIONT_FOR_TYPE(
const char *, NS_IMPL::__stl_hash_string(v));
182 __HASH_FUNCIONT_FOR_TYPE(
signed char *, NS_IMPL::__stl_hash_string((
const char *)v));
183 __HASH_FUNCIONT_FOR_TYPE(
const signed char *, NS_IMPL::__stl_hash_string((
const char *)v));
184 __HASH_FUNCIONT_FOR_TYPE(
unsigned char *, NS_IMPL::__stl_hash_string((
const char *)v));
185 __HASH_FUNCIONT_FOR_TYPE(
const unsigned char *, NS_IMPL::__stl_hash_string((
const char *)v));
186 __HASH_FUNCIONT_FOR_TYPE(
char,
size_t(v));
187 __HASH_FUNCIONT_FOR_TYPE(
signed char,
size_t(v));
188 __HASH_FUNCIONT_FOR_TYPE(
unsigned char,
size_t(v));
189 __HASH_FUNCIONT_FOR_TYPE(
signed short,
size_t(v));
190 __HASH_FUNCIONT_FOR_TYPE(
unsigned short,
size_t(v));
191 __HASH_FUNCIONT_FOR_TYPE(
signed int,
size_t(v));
192 __HASH_FUNCIONT_FOR_TYPE(
unsigned int,
size_t(v));
193 __HASH_FUNCIONT_FOR_TYPE(
signed long,
size_t(v));
194 __HASH_FUNCIONT_FOR_TYPE(
unsigned long,
size_t(v));
195 __HASH_FUNCIONT_FOR_TYPE(
signed long long,
size_t(v));
196 __HASH_FUNCIONT_FOR_TYPE(
unsigned long long,
size_t(v));
197 __HASH_FUNCIONT_FOR_TYPE(std::string, NS_IMPL::__stl_hash_string(v.c_str(),v.length()));
199 #undef __HASH_FUNCIONT_FOR_TYPE Definition: posix_shm_file.hh:10
Definition: template.hh:23
Definition: template.hh:109
Definition: template.hh:165
Definition: template.hh:174
Definition: template.hh:80
Definition: template.hh:151