epoc32/include/stdapis/boost/detail/lwm_win32_cs.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 #ifndef BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
     2 #define BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED
     3 
     4 // MS compatible compilers support #pragma once
     5 
     6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
     7 # pragma once
     8 #endif
     9 
    10 //
    11 //  boost/detail/lwm_win32_cs.hpp
    12 //
    13 //  Copyright (c) 2002, 2003 Peter Dimov
    14 //
    15 // Distributed under the Boost Software License, Version 1.0. (See
    16 // accompanying file LICENSE_1_0.txt or copy at
    17 // http://www.boost.org/LICENSE_1_0.txt)
    18 //
    19 
    20 #ifdef BOOST_USE_WINDOWS_H
    21 #  include <windows.h>
    22 #endif
    23 
    24 namespace boost
    25 {
    26 
    27 namespace detail
    28 {
    29 
    30 #ifndef BOOST_USE_WINDOWS_H
    31 
    32 struct CRITICAL_SECTION
    33 {
    34     struct critical_section_debug * DebugInfo;
    35     long LockCount;
    36     long RecursionCount;
    37     void * OwningThread;
    38     void * LockSemaphore;
    39 #if defined(_WIN64)
    40     unsigned __int64 SpinCount;
    41 #else
    42     unsigned long SpinCount;
    43 #endif
    44 };
    45 
    46 extern "C" __declspec(dllimport) void __stdcall InitializeCriticalSection(CRITICAL_SECTION *);
    47 extern "C" __declspec(dllimport) void __stdcall EnterCriticalSection(CRITICAL_SECTION *);
    48 extern "C" __declspec(dllimport) void __stdcall LeaveCriticalSection(CRITICAL_SECTION *);
    49 extern "C" __declspec(dllimport) void __stdcall DeleteCriticalSection(CRITICAL_SECTION *);
    50 
    51 #endif // #ifndef BOOST_USE_WINDOWS_H
    52 
    53 class lightweight_mutex
    54 {
    55 private:
    56 
    57     CRITICAL_SECTION cs_;
    58 
    59     lightweight_mutex(lightweight_mutex const &);
    60     lightweight_mutex & operator=(lightweight_mutex const &);
    61 
    62 public:
    63 
    64     lightweight_mutex()
    65     {
    66         InitializeCriticalSection(&cs_);
    67     }
    68 
    69     ~lightweight_mutex()
    70     {
    71         DeleteCriticalSection(&cs_);
    72     }
    73 
    74     class scoped_lock;
    75     friend class scoped_lock;
    76 
    77     class scoped_lock
    78     {
    79     private:
    80 
    81         lightweight_mutex & m_;
    82 
    83         scoped_lock(scoped_lock const &);
    84         scoped_lock & operator=(scoped_lock const &);
    85 
    86     public:
    87 
    88         explicit scoped_lock(lightweight_mutex & m): m_(m)
    89         {
    90             EnterCriticalSection(&m_.cs_);
    91         }
    92 
    93         ~scoped_lock()
    94         {
    95             LeaveCriticalSection(&m_.cs_);
    96         }
    97     };
    98 };
    99 
   100 } // namespace detail
   101 
   102 } // namespace boost
   103 
   104 #endif // #ifndef BOOST_DETAIL_LWM_WIN32_CS_HPP_INCLUDED