diff options
Diffstat (limited to 'cpp/src')
-rwxr-xr-x | cpp/src/qpid/sys/windows/Condition.h | 81 | ||||
-rwxr-xr-x | cpp/src/qpid/sys/windows/Mutex.h | 189 | ||||
-rw-r--r-- | cpp/src/qpid/sys/windows/Time.h | 36 |
3 files changed, 0 insertions, 306 deletions
diff --git a/cpp/src/qpid/sys/windows/Condition.h b/cpp/src/qpid/sys/windows/Condition.h deleted file mode 100755 index c31f7b4823..0000000000 --- a/cpp/src/qpid/sys/windows/Condition.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef _sys_windows_Condition_h -#define _sys_windows_Condition_h - -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - -#include "qpid/sys/Mutex.h" -#include "qpid/sys/Time.h" - -#include <time.h> -#include <boost/noncopyable.hpp> -#include <boost/thread/condition.hpp> -#include <boost/thread/thread_time.hpp> -#include <windows.h> -#undef STATUS_INVALID_PARAMETER // Hack for windows.h namespace pollution - -namespace qpid { -namespace sys { - -// Private Time related implementation details -void toPtime(boost::posix_time::ptime& pt, const AbsTime& t); - -/** - * A condition variable for thread synchronization. - */ -class Condition : private boost::noncopyable -{ - public: - inline Condition(); - inline ~Condition(); - inline void wait(Mutex&); - inline bool wait(Mutex&, const AbsTime& absoluteTime); - inline void notify(); - inline void notifyAll(); - - private: - boost::condition_variable_any condition; -}; - -Condition::Condition() { -} - -Condition::~Condition() { -} - -void Condition::wait(Mutex& mutex) { - condition.wait(mutex.mutex); -} - -bool Condition::wait(Mutex& mutex, const AbsTime& absoluteTime){ - return condition.timed_wait(mutex.mutex, absoluteTime.getPrivate()); -} - -void Condition::notify(){ - condition.notify_one(); -} - -void Condition::notifyAll(){ - condition.notify_all(); -} - -}} -#endif /*!_sys_windows_Condition_h*/ diff --git a/cpp/src/qpid/sys/windows/Mutex.h b/cpp/src/qpid/sys/windows/Mutex.h deleted file mode 100755 index 12768640d5..0000000000 --- a/cpp/src/qpid/sys/windows/Mutex.h +++ /dev/null @@ -1,189 +0,0 @@ -#ifndef _sys_windows_Mutex_h -#define _sys_windows_Mutex_h - -/* - * - * Copyright (c) 2008 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include "qpid/sys/windows/check.h" - -#include <boost/version.hpp> -#if (BOOST_VERSION < 103500) -#error The Windows port requires Boost version 1.35.0 or later -#endif - -#include <boost/noncopyable.hpp> -#include <boost/thread/recursive_mutex.hpp> -#include <boost/thread/shared_mutex.hpp> -#include <boost/thread/thread_time.hpp> -#include <boost/thread/tss.hpp> -#undef STATUS_INVALID_PARAMETER // Hack for windows.h namespace pollution - -namespace qpid { -namespace sys { - -class Condition; - -/** - * Mutex lock. - */ -class Mutex : private boost::noncopyable { - friend class Condition; - -public: - typedef ::qpid::sys::ScopedLock<Mutex> ScopedLock; - typedef ::qpid::sys::ScopedUnlock<Mutex> ScopedUnlock; - - inline Mutex(); - inline ~Mutex(); - inline void lock(); - inline void unlock(); - inline bool trylock(); - - -protected: - boost::recursive_mutex mutex; -}; - -/** - * RW lock. - */ -class RWlock : private boost::noncopyable { - friend class Condition; - -public: - typedef ::qpid::sys::ScopedRlock<RWlock> ScopedRlock; - typedef ::qpid::sys::ScopedWlock<RWlock> ScopedWlock; - - inline RWlock(); - inline ~RWlock(); - inline void wlock(); // will write-lock - inline void rlock(); // will read-lock - inline void unlock(); - inline void trywlock(); // will write-try - inline void tryrlock(); // will read-try - -protected: - boost::shared_mutex rwMutex; - boost::thread_specific_ptr<bool> haveWrite; - - inline bool &write (void); -}; - - -/** - * PODMutex is a POD, can be static-initialized with - * PODMutex m = QPID_PODMUTEX_INITIALIZER - */ -struct PODMutex -{ - typedef ::qpid::sys::ScopedLock<PODMutex> ScopedLock; - - inline void lock(); - inline void unlock(); - inline bool trylock(); - - // Must be public to be a POD: - boost::recursive_mutex mutex; -}; - -#define QPID_MUTEX_INITIALIZER 0 - -void PODMutex::lock() { - mutex.lock(); -} - -void PODMutex::unlock() { - mutex.unlock(); -} - -bool PODMutex::trylock() { - return mutex.try_lock(); -} - -Mutex::Mutex() { -} - -Mutex::~Mutex(){ -} - -void Mutex::lock() { - mutex.lock(); -} - -void Mutex::unlock() { - mutex.unlock(); -} - -bool Mutex::trylock() { - return mutex.try_lock(); -} - - -RWlock::RWlock() { -} - -RWlock::~RWlock(){ -} - -void RWlock::wlock() { - bool &writer = write(); - rwMutex.lock(); - writer = true; // Remember this thread has write lock held. -} - -void RWlock::rlock() { - bool &writer = write(); - rwMutex.lock_shared(); - writer = false; // Remember this thread has shared lock held. -} - -void RWlock::unlock() { - bool &writer = write(); - if (writer) - rwMutex.unlock(); - else - rwMutex.unlock_shared(); -} - -void RWlock::trywlock() { - bool &writer = write(); - // shared_mutex::try_lock() seems to not be available... emulate it with - // a timed lock(). - boost::system_time now = boost::get_system_time(); - if (rwMutex.timed_lock(now)) - writer = true; -} - -void RWlock::tryrlock() { - bool &writer = write(); - if (rwMutex.try_lock_shared()) - writer = false; -} - -bool & RWlock::write (void) { - // Accessing thread-specific and stack-local info, so no locks needed. - bool *writePtr = haveWrite.get(); - if (writePtr == 0) { - writePtr = new bool(false); - haveWrite.reset(writePtr); - } - return *writePtr; -} - -}} -#endif /*!_sys_windows_Mutex_h*/ diff --git a/cpp/src/qpid/sys/windows/Time.h b/cpp/src/qpid/sys/windows/Time.h deleted file mode 100644 index 2987b1c8b2..0000000000 --- a/cpp/src/qpid/sys/windows/Time.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef QPID_SYS_WINDOWS_TIME_H -#define QPID_SYS_WINDOWS_TIME_H - -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#include <boost/date_time/posix_time/posix_time_types.hpp> - -namespace qpid { -namespace sys { - -/** - * Class to represent an instant in time. Boost has this stuff already done - * so just reuse it. We can also grab this for quick use with the Condition - * wait operations. - */ -typedef boost::posix_time::ptime TimePrivate; - -}} // namespace qpid::sys - -#endif /*!QPID_SYS_WINDOWS_TIME_H*/ |