00001 #ifndef CLASSLIB_BIT_PATTERN_H
00002 # define CLASSLIB_BIT_PATTERN_H
00003
00004
00005
00006 # include "classlib/sysapi/system.h"
00007
00008 namespace lat {
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 template <unsigned int N>
00020 struct BitPatternHelp
00021 {
00022 template <class T, unsigned int Pat, unsigned int Width>
00023 struct PatWrapper
00024 {
00025 enum { Pattern = (((T) BitPatternHelp<N/2+N%2>::template PatWrapper<T,Pat,Width>::Pattern
00026 << (T) (Width*(N/2)))
00027 | (T) BitPatternHelp<N/2>::template PatWrapper<T,Pat,Width>::Pattern) };
00028 };
00029 };
00030
00032 template <>
00033 struct BitPatternHelp<0>
00034 {
00035 template <class T, unsigned int Pat, unsigned int Width>
00036 struct PatWrapper
00037 {
00038 enum { Pattern = (T) 0 };
00039 };
00040 };
00041
00043 template <>
00044 struct BitPatternHelp<1>
00045 {
00046 template <class T, unsigned int Pat, unsigned int Width>
00047 struct PatWrapper
00048 {
00049 enum { Pattern = (T) Pat };
00050 };
00051 };
00052
00060 template <class T, unsigned int Pat, unsigned int Width, unsigned int N>
00061 struct BitPattern
00062 {
00063 enum { Pattern = BitPatternHelp<N>::template PatWrapper<T,Pat,Width>::Pattern };
00064 };
00065
00066
00067
00068
00069 }
00070 #endif // CLASSLIB_BIT_PATTERN_H