From: <axl...@us...> - 2008-12-13 17:23:09
|
Revision: 74 http://hgengine.svn.sourceforge.net/hgengine/?rev=74&view=rev Author: axlecrusher Date: 2008-12-13 17:23:05 +0000 (Sat, 13 Dec 2008) Log Message: ----------- add mercury semaphore Added Paths: ----------- Mercury2/src/MSemaphore.cpp Mercury2/src/MSemaphore.h Added: Mercury2/src/MSemaphore.cpp =================================================================== --- Mercury2/src/MSemaphore.cpp (rev 0) +++ Mercury2/src/MSemaphore.cpp 2008-12-13 17:23:05 UTC (rev 74) @@ -0,0 +1,73 @@ +#include <MSemaphore.h> + +MSemaphore::MSemaphore() + :m_counter(0) +{ +} + +unsigned long MSemaphore::ReadValue() +{ + return __sync_or_and_fetch(&m_counter, 0); +} + +unsigned long MSemaphore::Decrement() +{ + return __sync_sub_and_fetch(&m_counter, 1); +} + +unsigned long MSemaphore::Increment() +{ + return __sync_add_and_fetch(&m_counter, 1); +} + +MSemaphoreIncOnDestroy::MSemaphoreIncOnDestroy(MSemaphore* s) + :m_s(s) +{ +} + +MSemaphoreIncOnDestroy::~MSemaphoreIncOnDestroy() +{ + m_s->Increment(); +} + +MSemaphoreDecOnDestroy::MSemaphoreDecOnDestroy(MSemaphore* s) + :m_s(s) +{ +} + +MSemaphoreDecOnDestroy::~MSemaphoreDecOnDestroy() +{ + m_s->Decrement(); +} + +/**************************************************************************** + * Copyright (C) 2008 by Joshua Allen * + * * + * * + * All rights reserved. * + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * Redistributions of source code must retain the above copyright * + * notice, this list of conditions and the following disclaimer. * + * * Redistributions in binary form must reproduce the above * + * copyright notice, this list of conditions and the following * + * disclaimer in the documentation and/or other materials provided * + * with the distribution. * + * * Neither the name of the Mercury Engine nor the names of its * + * contributors may be used to endorse or promote products derived * + * from this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + ***************************************************************************/ Added: Mercury2/src/MSemaphore.h =================================================================== --- Mercury2/src/MSemaphore.h (rev 0) +++ Mercury2/src/MSemaphore.h 2008-12-13 17:23:05 UTC (rev 74) @@ -0,0 +1,66 @@ +#ifndef MSEMAPHORE_H +#define MSEMAPHORE_H + +class MSemaphore +{ + public: + MSemaphore(); + + unsigned long ReadValue(); + unsigned long Decrement(); + unsigned long Increment(); + + private: + unsigned long m_counter; +}; + +class MSemaphoreIncOnDestroy +{ + public: + MSemaphoreIncOnDestroy(MSemaphore* s); + ~MSemaphoreIncOnDestroy(); + private: + MSemaphore* m_s; +}; + +class MSemaphoreDecOnDestroy +{ + public: + MSemaphoreDecOnDestroy(MSemaphore* s); + ~MSemaphoreDecOnDestroy(); + private: + MSemaphore* m_s; +}; + +#endif +/**************************************************************************** + * Copyright (C) 2008 by Joshua Allen * + * * + * * + * All rights reserved. * + * * + * Redistribution and use in source and binary forms, with or without * + * modification, are permitted provided that the following conditions * + * are met: * + * * Redistributions of source code must retain the above copyright * + * notice, this list of conditions and the following disclaimer. * + * * Redistributions in binary form must reproduce the above * + * copyright notice, this list of conditions and the following * + * disclaimer in the documentation and/or other materials provided * + * with the distribution. * + * * Neither the name of the Mercury Engine nor the names of its * + * contributors may be used to endorse or promote products derived * + * from this software without specific prior written permission. * + * * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * + ***************************************************************************/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |