diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/Base.cpp | 68 | ||||
-rw-r--r-- | src/shared/Base.h | 55 | ||||
-rw-r--r-- | src/shared/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/shared/Mthread.cpp | 206 | ||||
-rw-r--r-- | src/shared/Mthread.h | 63 |
5 files changed, 0 insertions, 396 deletions
diff --git a/src/shared/Base.cpp b/src/shared/Base.cpp deleted file mode 100644 index ca5094810d6..00000000000 --- a/src/shared/Base.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - Base class interface - Copyright (C) 1998,1999 by Andrew Zabolotny - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "Base.h" - -Base::~Base () -{ -} - -/** - * Decrement object's reference count; as soon as the last reference - * to the object is removed, it is destroyed. - */ - -void Base::DecRef () -{ - if (!--RefCount) - delete this; -} - -/** - * Object initialization. The initial reference count is set to one; - * this means if you call DecRef() immediately after creating the object, - * it will be destroyed. - */ -Base::Base () -{ - RefCount = 1; -} - -/** - * Increment reference count. - * Every time when you copy a pointer to a object and store it for - * later use you MUST call IncRef() on it; this will allow to keep - * objects as long as they are referenced by some entity. - */ -void Base::IncRef () -{ - ++RefCount; - -} - -/** - * Query number of references to this object. - * I would rather prefer to have the reference counter strictly private, - * but sometimes, mostly for debugging, such a function can help. - */ -int Base::GetRefCount () -{ - return RefCount; -} - diff --git a/src/shared/Base.h b/src/shared/Base.h deleted file mode 100644 index e14ea6b27b9..00000000000 --- a/src/shared/Base.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - Base class interface - Copyright (C) 1998,1999 by Andrew Zabolotny - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#ifndef __BASE_H__ -#define __BASE_H__ - -#include "Common.h" - -/** - * This class is intended to be a base class for every other class. - * It defines the basic interface available for any object. - */ -class Base -{ - private: - /// Object reference count - int RefCount; - - protected: - /** - * Destroy this object. Destructor is virtual, because class contains - * virtual methods; also it is private because it is never intended - * to be called directly; use DecRef() instead: when reference counter - * reaches zero, the object will be destroyed. - */ - virtual ~Base (); - - public: - - Base (); - - void IncRef (); - - void DecRef (); - int GetRefCount (); - -}; -#endif // __BASE_H__ - diff --git a/src/shared/CMakeLists.txt b/src/shared/CMakeLists.txt index 36d65544d3c..8ecfccad34f 100644 --- a/src/shared/CMakeLists.txt +++ b/src/shared/CMakeLists.txt @@ -6,16 +6,12 @@ add_subdirectory(Database) ########### next target ############### SET(shared_STAT_SRCS - Base.cpp - Base.h ByteBuffer.h Common.cpp Common.h Errors.h Log.cpp Log.h - Mthread.cpp - Mthread.h ProgressBar.cpp ProgressBar.h Timer.h diff --git a/src/shared/Mthread.cpp b/src/shared/Mthread.cpp deleted file mode 100644 index fbbeeb5a620..00000000000 --- a/src/shared/Mthread.cpp +++ /dev/null @@ -1,206 +0,0 @@ -/* - Cross-platform thread handling - Copyright (C) 2005 Andrew Zabolotny - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - -#include "Mthread.h" - -#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE_CC__) -# define TRINITY_PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE -#else -# define TRINITY_PTHREAD_MUTEX_RECURSIVE PTHREAD_MUTEX_RECURSIVE_NP -#endif - -#if PLATFORM != PLATFORM_WINDOWS - -MThread::MThread () -{ - tid = 0; -} - -MThread::~MThread () -{ - /* Kill thread if this is not the current thread */ - if (tid && (pthread_self () != tid)) - { - pthread_cancel (tid); - pthread_join (tid, NULL); - } -} - -static void *thread_start_routine (void *arg) -{ - MThread *newthr = (MThread *)arg; - pthread_setcanceltype (PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - newthr->routine (newthr->arg); - return NULL; -} - -MThread *MThread::Start (void (*routine) (void *arg), void *arg) -{ - MThread *newthr = new MThread (); - newthr->routine = routine; - newthr->arg = arg; - int rc = pthread_create (&newthr->tid, NULL, thread_start_routine, newthr); - if (rc) - { - newthr->DecRef (); - return NULL; - } - - return newthr; -} - -pthread_mutexattr_t MMutex::attr; -int MMutex::attr_refcount = 0; - -MMutex::MMutex () -{ - if (!attr_refcount++) - { - pthread_mutexattr_init (&attr); - pthread_mutexattr_settype (&attr, TRINITY_PTHREAD_MUTEX_RECURSIVE); - } - - pthread_mutex_init (&mutex, &attr); -} - -MMutex::~MMutex () -{ - pthread_mutex_destroy (&mutex); - if (!--attr_refcount) - pthread_mutexattr_destroy (&attr); -} - -bool MMutex::Lock () -{ - return (pthread_mutex_lock (&mutex) == 0); -} - -bool MMutex::TryLock () -{ - return (pthread_mutex_trylock (&mutex) == 0); -} - -void MMutex::Unlock () -{ - pthread_mutex_unlock (&mutex); -} - -MMutex *MMutex::Create () -{ - return new MMutex (); -} - -#else //windows - -MThread::MThread() -{ - th = NULL; -} - -MThread::~MThread () -{ - /* Kill thread if this is not current thread */ - if (th && (GetCurrentThreadId () != id)) - { - TerminateThread (th, 0); - WaitForSingleObject (th, INFINITE); - CloseHandle (th); - } -} - -bool MThread::SetPriority (ThreadPriority prio) -{ - int p; - switch (prio) - { - case IDLE: p = THREAD_PRIORITY_IDLE; break; - case LOWER: p = THREAD_PRIORITY_LOWEST; break; - case LOW: p = THREAD_PRIORITY_BELOW_NORMAL; break; - case NORMAL: p = THREAD_PRIORITY_NORMAL; break; - case HIGH: p = THREAD_PRIORITY_ABOVE_NORMAL; break; - case HIGHER: p = THREAD_PRIORITY_HIGHEST; break; - case REALTIME: p = THREAD_PRIORITY_TIME_CRITICAL; break; - default: p = THREAD_PRIORITY_NORMAL; break; - } - return SetThreadPriority (th, p); -} - -static DWORD WINAPI thread_start_routine (void *arg) -//static void thread_start_routine (void *arg) -{ - MThread *newthr = (MThread *)arg; - newthr->id = GetCurrentThreadId (); - newthr->routine (newthr->arg); - return 0; -} - -MThread *MThread::Start (void (*routine) (void *arg), void *arg) -{ - DWORD dwtid; - MThread *newthr = new MThread (); - newthr->routine = routine; - newthr->arg = arg; - newthr->th = CreateThread (NULL, WIN32_THREAD_STACK_SIZE, thread_start_routine, newthr, 0, &dwtid); - //newthr->th = (HANDLE)_beginthread(thread_start_routine, 0, newthr); - if (!newthr->th) - { - newthr->DecRef (); - return NULL; - } - return newthr; -} - -MMutex::MMutex () -{ - sem = CreateMutex (NULL, FALSE, NULL); -} - -MMutex::~MMutex () -{ - CloseHandle (sem); -} - -bool MMutex::Lock () -{ - return (WaitForSingleObject (sem, INFINITE) != WAIT_FAILED); -} - -bool MMutex::TryLock () -{ - DWORD state = WaitForSingleObject (sem, 0); - return (state == WAIT_OBJECT_0) && (state != WAIT_ABANDONED); -} - -void MMutex::Unlock () -{ - ReleaseMutex (sem); -} - -MMutex *MMutex::Create () -{ - MMutex *mutex = new MMutex (); - if (!mutex->sem) - { - mutex->DecRef (); - return NULL; - } - return mutex; -} -#endif - diff --git a/src/shared/Mthread.h b/src/shared/Mthread.h deleted file mode 100644 index d0ac6deb43c..00000000000 --- a/src/shared/Mthread.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef MTHREAD_H -#define MTHREAD_H - -#include "Base.h" -#ifndef WIN32 -#include <pthread.h> -#else -#include <windows.h> -//#include "Process.h" -#define WIN32_THREAD_STACK_SIZE 0x10000 -#endif - -enum ThreadPriority -{ - IDLE, - LOWER, - LOW, - NORMAL, - HIGH, - HIGHER, - REALTIME -}; - -class MThread: public Base -{ - public: - static MThread *Start (void (*routine) (void *arg), void *arg); - MThread (); - ~MThread (); - bool SetPriority (ThreadPriority prio); - - void (*routine) (void *arg); - void *arg; - - #ifdef WIN32 - HANDLE th; - ULONG id; - #else - pthread_t tid; - #endif - -}; - -class MMutex : public Base -{ - public: - - #ifdef WIN32 - HANDLE sem; - #else - pthread_mutex_t mutex; - static pthread_mutexattr_t attr; - static int attr_refcount; - #endif - static MMutex *Create (); - MMutex (); - virtual ~MMutex (); - virtual bool Lock (); - virtual bool TryLock (); - virtual void Unlock (); -}; -#endif // MTHREAD_H - |