Update of /cvsroot/com0com/com0com/setup
In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv30930
Modified Files:
utils.cpp utils.h
Log Message:
Added StrToInt() and class BusyMask
Index: utils.cpp
===================================================================
RCS file: /cvsroot/com0com/com0com/setup/utils.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** utils.cpp 28 Jul 2006 12:16:43 -0000 1.1
--- utils.cpp 2 Nov 2006 16:09:13 -0000 1.2
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.2 2006/11/02 16:09:13 vfrolov
+ * Added StrToInt() and class BusyMask
+ *
* Revision 1.1 2006/07/28 12:16:43 vfrolov
* Initial revision
***************
*** 57,58 ****
--- 60,158 ----
}
///////////////////////////////////////////////////////////////
+ BOOL StrToInt(const char *pStr, int *pNum)
+ {
+ BOOL res = FALSE;
+ int num;
+ int sign = 1;
+
+ switch (*pStr) {
+ case '-':
+ sign = -1;
+ case '+':
+ pStr++;
+ break;
+ }
+
+ for (num = 0 ;; pStr++) {
+ switch (*pStr) {
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ num = num*10 + (*pStr - '0');
+ res = TRUE;
+ continue;
+ case 0:
+ break;
+ default:
+ res = FALSE;
+ }
+ break;
+ }
+
+ if (pNum)
+ *pNum = num*sign;
+
+ return res;
+ }
+ ///////////////////////////////////////////////////////////////
+ BusyMask::~BusyMask()
+ {
+ if (pBusyMask)
+ LocalFree(pBusyMask);
+ }
+
+ void BusyMask::AddNum(int num)
+ {
+ ULONG maskNum = num/(sizeof(*pBusyMask)*8);
+
+ if (maskNum >= busyMaskLen) {
+ SIZE_T newBusyMaskLen = maskNum + 1;
+ PBYTE pNewBusyMask;
+
+ if (!pBusyMask)
+ pNewBusyMask = (PBYTE)LocalAlloc(LPTR, newBusyMaskLen);
+ else
+ pNewBusyMask = (PBYTE)LocalReAlloc(pBusyMask, newBusyMaskLen, LMEM_ZEROINIT);
+
+ if (pNewBusyMask) {
+ pBusyMask = pNewBusyMask;
+ busyMaskLen = newBusyMaskLen;
+ } else {
+ return;
+ }
+ }
+
+ ULONG mask = 1 << (num%(sizeof(*pBusyMask)*8));
+
+ pBusyMask[maskNum] |= mask;
+ }
+
+ BOOL BusyMask::IsFreeNum(int num) const
+ {
+ ULONG maskNum = num/(sizeof(*pBusyMask)*8);
+
+ if (maskNum >= busyMaskLen)
+ return TRUE;
+
+ ULONG mask = 1 << (num%(sizeof(*pBusyMask)*8));
+
+ return (pBusyMask[maskNum] & mask) == 0;
+ }
+
+ int BusyMask::GetFirstFreeNum() const
+ {
+ int num;
+
+ for (num = 0 ; !IsFreeNum(num) ; num++)
+ ;
+
+ return num;
+ }
+ ///////////////////////////////////////////////////////////////
Index: utils.h
===================================================================
RCS file: /cvsroot/com0com/com0com/setup/utils.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** utils.h 28 Jul 2006 12:16:43 -0000 1.1
--- utils.h 2 Nov 2006 16:09:13 -0000 1.2
***************
*** 20,23 ****
--- 20,26 ----
*
* $Log$
+ * Revision 1.2 2006/11/02 16:09:13 vfrolov
+ * Added StrToInt() and class BusyMask
+ *
* Revision 1.1 2006/07/28 12:16:43 vfrolov
* Initial revision
***************
*** 31,34 ****
--- 34,51 ----
int VSNPRINTF(char *pBuf, int size, const char *pFmt, va_list va);
int SNPRINTF(char *pBuf, int size, const char *pFmt, ...);
+ BOOL StrToInt(const char *pStr, int *pNum);
+
+ class BusyMask {
+ public:
+ BusyMask() : pBusyMask(NULL), busyMaskLen(0) {}
+ ~BusyMask();
+
+ void AddNum(int num);
+ BOOL IsFreeNum(int num) const;
+ int GetFirstFreeNum() const;
+ private:
+ PBYTE pBusyMask;
+ SIZE_T busyMaskLen;
+ };
#endif /* _C0C_UTILS_H_ */
|