Go to the documentation of this file.00001
00002
00003
00004
00005
00008
00009
00010 #ifndef lgrUtilityFunctions_H_
00011 #define lgrUtilityFunctions_H_
00012
00013 #include "lgrUtil.h"
00014 #include <vlutil/vlNetTypes.h>
00015 #include <vector>
00016
00017 namespace MAKLogger
00018 {
00019
00020 typedef std::vector<DtString> DtStringVector;
00021 const char theDefaultDeliminator = ';';
00022
00023 inline size_t roundUpTo2( size_t sz )
00024 {
00025 return sz + (sz & (size_t)0x01);
00026 }
00027
00028 inline int roundUpTo2( int sz )
00029 {
00030 return sz + (sz & (int)0x01);
00031 }
00032
00033 inline size_t roundUpTo4( size_t sz )
00034 {
00035 size_t align = sz & (size_t)0x03;
00036 return align ? (sz + (size_t)4 - align) : sz;
00037 }
00038 #ifdef _M_X64
00039 inline unsigned int roundUpTo4( unsigned int sz )
00040 {
00041 unsigned int align = sz & (unsigned int)0x03;
00042 return align ? (sz + (unsigned int)4 - align) : sz;
00043 }
00044 #endif
00045 inline int roundUpTo4( int sz )
00046 {
00047 int align = sz & (int)0x03;
00048 return align ? (sz + (int)4 - align) : sz;
00049 }
00050
00051 inline size_t roundUpTo8( size_t sz )
00052 {
00053 size_t align = sz & (size_t)0x07;
00054 return align ? (sz + (size_t)8 - align) : sz;
00055 }
00056
00057 #ifdef _M_X64
00058 inline unsigned int roundUpTo8( unsigned int sz )
00059 {
00060 unsigned int align = sz & (unsigned int)0x07;
00061 return align ? (sz + (unsigned int)8 - align) : sz;
00062 }
00063 #endif
00064
00065
00066 inline int roundUpTo8( int sz )
00067 {
00068 int align = sz & (int)0x07;
00069 return align ? (sz + (int)8 - align) : sz;
00070 }
00071
00072 inline void DtCreateDeliminatedString(const DtStringVector& stringList, DtString& deliminatedString, char deliminator=theDefaultDeliminator)
00073 {
00074 DtStringVector::const_iterator stringIter = stringList.begin();
00075 DtStringVector::const_iterator stringEnd = stringList.end();
00076 if (stringIter != stringEnd)
00077 {
00078 deliminatedString = *stringIter;
00079 for ( ++stringIter; stringIter != stringEnd; ++stringIter)
00080 {
00081 deliminatedString += deliminator;
00082 deliminatedString += *stringIter;
00083 }
00084 }
00085 }
00086
00087 inline int DtSeparateDeliminatedString(const DtString& deliminatedString,
00088 DtStringVector& stringList, char deliminator=theDefaultDeliminator,
00089 bool allowEmptyTokens=false, bool appendToExistingList=false)
00090 {
00091 DtString buffer(deliminatedString);
00092 if (!appendToExistingList)
00093 {
00094 stringList.clear();
00095 }
00096
00097 while (!buffer.isEmpty())
00098 {
00099 DtString token = buffer;
00100 if (!buffer.snipFront(deliminator))
00101 {
00102 buffer = DtString::nullString();
00103 }
00104 token.snipBack(deliminator, true);
00105 token.chompBack();
00106 token.chompFront();
00107 if (allowEmptyTokens || !token.isEmpty())
00108 {
00109 stringList.push_back(token);
00110 }
00111 }
00112 return stringList.size();
00113 }
00114 }
00115
00116 #endif