123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534 |
- #ifndef __WXUTIL__
- #define __WXUTIL__
- #pragma warning(disable: 4705)
- class CCritSec {
-
- CCritSec(const CCritSec &refCritSec);
- CCritSec &operator=(const CCritSec &refCritSec);
- CRITICAL_SECTION m_CritSec;
- #ifdef DEBUG
- public:
- DWORD m_currentOwner;
- DWORD m_lockCount;
- BOOL m_fTrace;
- public:
- CCritSec();
- ~CCritSec();
- void Lock();
- void Unlock();
- #else
- public:
- CCritSec() {
- InitializeCriticalSection(&m_CritSec);
- };
- ~CCritSec() {
- DeleteCriticalSection(&m_CritSec);
- };
- void Lock() {
- EnterCriticalSection(&m_CritSec);
- };
- void Unlock() {
- LeaveCriticalSection(&m_CritSec);
- };
- #endif
- };
- #ifdef DEBUG
- BOOL WINAPI CritCheckIn(CCritSec * pcCrit);
- BOOL WINAPI CritCheckIn(const CCritSec * pcCrit);
- BOOL WINAPI CritCheckOut(CCritSec * pcCrit);
- BOOL WINAPI CritCheckOut(const CCritSec * pcCrit);
- void WINAPI DbgLockTrace(CCritSec * pcCrit, BOOL fTrace);
- #else
- #define CritCheckIn(x) TRUE
- #define CritCheckOut(x) TRUE
- #define DbgLockTrace(pc, fT)
- #endif
- class CAutoLock {
-
- CAutoLock(const CAutoLock &refAutoLock);
- CAutoLock &operator=(const CAutoLock &refAutoLock);
- protected:
- CCritSec * m_pLock;
- public:
- CAutoLock(CCritSec * plock)
- {
- m_pLock = plock;
- m_pLock->Lock();
- };
- ~CAutoLock() {
- m_pLock->Unlock();
- };
- };
- class CAMEvent
- {
-
- CAMEvent(const CAMEvent &refEvent);
- CAMEvent &operator=(const CAMEvent &refEvent);
- protected:
- HANDLE m_hEvent;
- public:
- CAMEvent(BOOL fManualReset = FALSE, __inout_opt HRESULT *phr = NULL);
- CAMEvent(__inout_opt HRESULT *phr);
- ~CAMEvent();
-
- operator HANDLE () const { return m_hEvent; };
- void Set() {EXECUTE_ASSERT(SetEvent(m_hEvent));};
- BOOL Wait(DWORD dwTimeout = INFINITE) {
- return (WaitForSingleObject(m_hEvent, dwTimeout) == WAIT_OBJECT_0);
- };
- void Reset() { ResetEvent(m_hEvent); };
- BOOL Check() { return Wait(0); };
- };
- class CAMMsgEvent : public CAMEvent
- {
- public:
- CAMMsgEvent(__inout_opt HRESULT *phr = NULL);
-
- BOOL WaitMsg(DWORD dwTimeout = INFINITE);
- };
- #define CTimeoutEvent CAMEvent
- #ifdef AM_NOVTABLE
- class AM_NOVTABLE CAMThread {
-
- CAMThread(const CAMThread &refThread);
- CAMThread &operator=(const CAMThread &refThread);
- CAMEvent m_EventSend;
- CAMEvent m_EventComplete;
- DWORD m_dwParam;
- DWORD m_dwReturnVal;
- protected:
- HANDLE m_hThread;
-
-
- virtual DWORD ThreadProc() = 0;
- public:
- CAMThread(__inout_opt HRESULT *phr = NULL);
- virtual ~CAMThread();
- CCritSec m_AccessLock;
- CCritSec m_WorkerLock;
-
-
- static DWORD WINAPI InitialThreadProc(__inout LPVOID pv);
-
- BOOL Create();
-
-
- DWORD CallWorker(DWORD);
-
-
- void Close() {
-
- #pragma warning(push)
- #pragma warning(disable: 4312)
- HANDLE hThread = (HANDLE)InterlockedExchangePointer(&m_hThread, 0);
- #pragma warning(pop)
- if (hThread) {
- WaitForSingleObject(hThread, INFINITE);
- CloseHandle(hThread);
- }
- };
-
-
- BOOL ThreadExists(void) const
- {
- if (m_hThread == 0) {
- return FALSE;
- } else {
- return TRUE;
- }
- }
-
- DWORD GetRequest();
-
- BOOL CheckRequest(__out_opt DWORD * pParam);
-
- void Reply(DWORD);
-
-
- HANDLE GetRequestHandle() const { return m_EventSend; };
-
- DWORD GetRequestParam() const { return m_dwParam; };
-
-
- static HRESULT CoInitializeHelper();
- };
- #endif
- #define DEFAULT_QUEUESIZE 2
- template <class T> class CQueue {
- private:
- HANDLE hSemPut;
- HANDLE hSemGet;
- CRITICAL_SECTION CritSect;
- int nMax;
- int iNextPut;
- int iNextGet;
- T *QueueObjects;
- void Initialize(int n) {
- iNextPut = iNextGet = 0;
- nMax = n;
- InitializeCriticalSection(&CritSect);
- hSemPut = CreateSemaphore(NULL, n, n, NULL);
- hSemGet = CreateSemaphore(NULL, 0, n, NULL);
- QueueObjects = new T[n];
- }
- public:
- CQueue(int n) {
- Initialize(n);
- }
- CQueue() {
- Initialize(DEFAULT_QUEUESIZE);
- }
- ~CQueue() {
- delete [] QueueObjects;
- DeleteCriticalSection(&CritSect);
- CloseHandle(hSemPut);
- CloseHandle(hSemGet);
- }
- T GetQueueObject() {
- int iSlot;
- T Object;
- LONG lPrevious;
-
-
-
- WaitForSingleObject(hSemGet, INFINITE);
- EnterCriticalSection(&CritSect);
- iSlot = iNextGet++ % nMax;
- Object = QueueObjects[iSlot];
- LeaveCriticalSection(&CritSect);
-
-
-
- ReleaseSemaphore(hSemPut, 1L, &lPrevious);
- return Object;
- }
- void PutQueueObject(T Object) {
- int iSlot;
- LONG lPrevious;
-
-
-
- WaitForSingleObject(hSemPut, INFINITE);
- EnterCriticalSection(&CritSect);
- iSlot = iNextPut++ % nMax;
- QueueObjects[iSlot] = Object;
- LeaveCriticalSection(&CritSect);
-
-
-
- ReleaseSemaphore(hSemGet, 1L, &lPrevious);
- }
- };
- #ifdef _MSC_VER
- HRESULT AMSafeMemMoveOffset(
- __in_bcount(dst_size) void * dst,
- __in size_t dst_size,
- __in DWORD cb_dst_offset,
- __in_bcount(src_size) const void * src,
- __in size_t src_size,
- __in DWORD cb_src_offset,
- __in size_t count);
- #endif
- extern "C"
- void * __stdcall memmoveInternal(void *, const void *, size_t);
- inline void * __cdecl memchrInternal(const void *buf, int chr, size_t cnt)
- {
- #if defined(_X86_) && defined(_MSC_VER)
- void *pRet = NULL;
- _asm {
- cld
- mov ecx, cnt
- mov edi, buf
- mov eax, chr
- repne scasb
- jnz exit_memchr
- dec edi
-
- mov pRet, edi
- exit_memchr:
- }
- return pRet;
- #else
- while ( cnt && (*(unsigned char *)buf != (unsigned char)chr) ) {
- buf = (unsigned char *)buf + 1;
- cnt--;
- }
- return(cnt ? (void *)buf : NULL);
- #endif
- }
- void WINAPI IntToWstr(int i, __out_ecount(12) LPWSTR wstr);
- #define WstrToInt(sz) _wtoi(sz)
- #define atoiW(sz) _wtoi(sz)
- #define atoiA(sz) atoi(sz)
- extern const DWORD bits555[3];
- extern const DWORD bits565[3];
- extern const DWORD bits888[3];
- STDAPI_(const GUID) GetTrueColorType(const BITMAPINFOHEADER *pbmiHeader);
- STDAPI_(const GUID) GetBitmapSubtype(const BITMAPINFOHEADER *pbmiHeader);
- STDAPI_(WORD) GetBitCount(const GUID *pSubtype);
- STDAPI_(CHAR *) GetSubtypeNameA(const GUID *pSubtype);
- STDAPI_(WCHAR *) GetSubtypeNameW(const GUID *pSubtype);
- #ifdef UNICODE
- #define GetSubtypeName GetSubtypeNameW
- #else
- #define GetSubtypeName GetSubtypeNameA
- #endif
- STDAPI_(LONG) GetBitmapFormatSize(const BITMAPINFOHEADER *pHeader);
- STDAPI_(DWORD) GetBitmapSize(const BITMAPINFOHEADER *pHeader);
- #ifdef __AMVIDEO__
- STDAPI_(BOOL) ContainsPalette(const VIDEOINFOHEADER *pVideoInfo);
- STDAPI_(const RGBQUAD *) GetBitmapPalette(const VIDEOINFOHEADER *pVideoInfo);
- #endif
- BOOL WINAPI IsEqualObject(IUnknown *pFirst, IUnknown *pSecond);
- #define EqualPins(pPin1, pPin2) IsEqualObject(pPin1, pPin2)
- LONGLONG WINAPI llMulDiv(LONGLONG a, LONGLONG b, LONGLONG c, LONGLONG rnd);
- LONGLONG WINAPI Int64x32Div32(LONGLONG a, LONG b, LONG c, LONG rnd);
- STDAPI WriteBSTR(__deref_out BSTR * pstrDest, LPCWSTR szSrc);
- STDAPI FreeBSTR(__deref_in BSTR* pstr);
- STDAPI AMGetWideString(LPCWSTR pszString, __deref_out LPWSTR *ppszReturn);
- DWORD WINAPI WaitDispatchingMessages(
- HANDLE hObject,
- DWORD dwWait,
- HWND hwnd = NULL,
- UINT uMsg = 0,
- HANDLE hEvent = NULL);
- #define AmHresultFromWin32(x) (MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, x))
- HRESULT AmGetLastErrorToHResult(void);
- IUnknown* QzAtlComPtrAssign(__deref_inout_opt IUnknown** pp, __in_opt IUnknown* lp);
- template <class T>
- class QzCComPtr
- {
- public:
- typedef T _PtrClass;
- QzCComPtr() {p=NULL;}
- QzCComPtr(T* lp)
- {
- if ((p = lp) != NULL)
- p->AddRef();
- }
- QzCComPtr(const QzCComPtr<T>& lp)
- {
- if ((p = lp.p) != NULL)
- p->AddRef();
- }
- ~QzCComPtr() {if (p) p->Release();}
- void Release() {if (p) p->Release(); p=NULL;}
- operator T*() {return (T*)p;}
- T& operator*() {ASSERT(p!=NULL); return *p; }
-
-
- T** operator&() { ASSERT(p==NULL); return &p; }
- T* operator->() { ASSERT(p!=NULL); return p; }
- T* operator=(T* lp){return (T*)QzAtlComPtrAssign((IUnknown**)&p, lp);}
- T* operator=(const QzCComPtr<T>& lp)
- {
- return (T*)QzAtlComPtrAssign((IUnknown**)&p, lp.p);
- }
- #if _MSC_VER>1020
- bool operator!(){return (p == NULL);}
- #else
- BOOL operator!(){return (p == NULL) ? TRUE : FALSE;}
- #endif
- T* p;
- };
- MMRESULT CompatibleTimeSetEvent( UINT uDelay, UINT uResolution, __in LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent );
- bool TimeKillSynchronousFlagAvailable( void );
- __inline int lstrcmpiLocaleIndependentW(LPCWSTR lpsz1, LPCWSTR lpsz2)
- {
- return CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, lpsz1, -1, lpsz2, -1) - CSTR_EQUAL;
- }
- __inline int lstrcmpiLocaleIndependentA(LPCSTR lpsz1, LPCSTR lpsz2)
- {
- return CompareStringA(LOCALE_INVARIANT, NORM_IGNORECASE, lpsz1, -1, lpsz2, -1) - CSTR_EQUAL;
- }
- #endif
|