text: /*******************************************************************************
   * Copyright (c) 2012, Jean-David Gadina - www.xs-labs.com
   * Distributed under the Boost Software License, Version 1.0.
   * 
   * Boost Software License - Version 1.0 - August 17th, 2003
   * 
   * Permission is hereby granted, free of charge, to any person or organization
   * obtaining a copy of the software and accompanying documentation covered by
   * this license (the "Software") to use, reproduce, display, distribute,
   * execute, and transmit the Software, and to prepare derivative works of the
   * Software, and to permit third-parties to whom the Software is furnished to
   * do so, all subject to the following:
   * 
   * The copyright notices in the Software and this entire statement, including
   * the above license grant, this restriction and the following disclaimer,
   * must be included in all copies of the Software, in whole or in part, and
   * all derivative works of the Software, unless such copies or derivative
   * works are solely in the form of machine-executable object code generated by
   * a source language processor.
   * 
   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   * FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
   * SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
   * FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
   * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   * DEALINGS IN THE SOFTWARE.
   ******************************************************************************/
  
  /* $Id$ */
  
  /*!
   * @header          Lock.h
   * @author          Jean-David Gadina - www.xs-labs.com
   * @copyright       (c) 2012, XSLabs
   */
  
  #ifndef __EOS_LOCK_H__
  #define __EOS_LOCK_H__
  
  #include "Object.h"
  
  namespace EOS
  {
      /*!
       * @class           EOS::Lock
       * @abstract        ...
       * @description     ...
       */
      class Lock: public Object
      {
          public:
              
              /*!
               * @method          EOS::Lock::Lock
               * @abstract        ...
               * @description     ...
               */
              Lock();
              
              /*!
               * @method          EOS::Lock::~Lock
               * @abstract        ...
               * @description     ...
               */
              ~Lock();
              
              /*!
               * @method          EOS::Lock::lock
               * @abstract        ...
               * @description     ...
               */
              bool lock();
              
              /*!
               * @method          EOS::Lock::unlock
               * @abstract        ...
               * @description     ...
               */
              bool unlock();
              
              /*!
               * @method          EOS::Lock::tryLock
               * @abstract        ...
               * @description     ...
               */
              bool tryLock();
              
              /*!
               * @method          EOS::Lock::isLocked
               * @abstract        ...
               * @description     ...
               */
              bool isLocked();
              
          protected:
              
              /*!
               * @var             EOS::Lock::_locked
               * @abstract        ...
               * @description     ...
               */
              bool _locked;
              
              /*!
               * @var             EOS::Lock::_mutex
               * @abstract        ...
               * @description     ...
               */
              #ifdef _WIN32
                  
                  HANDLE _mutex;
                  
              #else
                  
                  pthread_mutex_t _mutex;
                  
              #endif
      };
  }
  
  #endif /* __EOS_LOCK_H__ */
  