Files CCore/inc/PrintBits.h CCore/src/PrintBits.cpp
PrintBits() is a Creator function, it is used to bind together a printing device and some unsigned integral value to build the Helper Type PrintBitsType object.
template <class UInt,class P>
PrintBitsType<P,UInt> PrintBits(P &out,UInt value) { return PrintBitsType<P,UInt>(out,value); }
PrintBitsType prints bits of the given value in a textual form.
template <class P,class UInt>
class PrintBitsType
{
P &out;
UInt value;
bool empty;
public:
PrintBitsType(P &out,UInt value);
PrintBitsType<P,UInt> & operator () (UInt flag,StrLen name);
void complete();
};
Here is the usage pattern (from GenFile.h):
PrintBits<uint32>(out,oflags)
(Open_Read ,"Read")
(Open_Write ,"Write")
(Open_Pos ,"Pos")
(Open_Create ,"Create")
(Open_Erase ,"Erase")
(Open_New ,"New")
(Open_AutoDelete,"AutoDelete")
(Open_PosEnd ,"PosEnd")
.complete();
//
// Prints like Read|Write|Pos
//
And more:
class FileOpenFlagsTextDesc
{
FileOpenFlags oflags;
public:
explicit FileOpenFlagsTextDesc(FileOpenFlags oflags_) : oflags(oflags_) {}
template <class P>
void print(P &out) const
{
PrintBits<uint32>(out,oflags)
(Open_Read ,"Read")
(Open_Write ,"Write")
(Open_Pos ,"Pos")
(Open_Create ,"Create")
(Open_Erase ,"Erase")
(Open_New ,"New")
(Open_AutoDelete,"AutoDelete")
(Open_PosEnd ,"PosEnd")
.complete();
}
};
inline FileOpenFlagsTextDesc GetTextDesc(FileOpenFlags oflags) { return FileOpenFlagsTextDesc(oflags); }