~mixxxdevelopers/mixxx/features_search

« back to all changes in this revision

Viewing changes to mixxx/lib/clucene-2.3.3.4/src/ext/boost/smart_ptr/detail/lwm_pthreads.hpp

  • Committer: RJ Ryan
  • Date: 2011-05-27 23:54:08 UTC
  • Revision ID: rryan@mit.edu-20110527235408-kepzw0zdxdhngsqr
Add clucene-2.3.3.4 to lib/

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED
 
2
#define BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_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_pthreads.hpp
 
12
//
 
13
//  Copyright (c) 2002 Peter Dimov and Multi Media Ltd.
 
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
#include <boost/assert.hpp>
 
21
#include <pthread.h>
 
22
 
 
23
namespace boost
 
24
{
 
25
 
 
26
namespace detail
 
27
{
 
28
 
 
29
class lightweight_mutex
 
30
{
 
31
private:
 
32
 
 
33
    pthread_mutex_t m_;
 
34
 
 
35
    lightweight_mutex(lightweight_mutex const &);
 
36
    lightweight_mutex & operator=(lightweight_mutex const &);
 
37
 
 
38
public:
 
39
 
 
40
    lightweight_mutex()
 
41
    {
 
42
 
 
43
// HPUX 10.20 / DCE has a nonstandard pthread_mutex_init
 
44
 
 
45
#if defined(__hpux) && defined(_DECTHREADS_)
 
46
        BOOST_VERIFY( pthread_mutex_init( &m_, pthread_mutexattr_default ) == 0 );
 
47
#else
 
48
        BOOST_VERIFY( pthread_mutex_init( &m_, 0 ) == 0 );
 
49
#endif
 
50
    }
 
51
 
 
52
    ~lightweight_mutex()
 
53
    {
 
54
        BOOST_VERIFY( pthread_mutex_destroy( &m_ ) == 0 );
 
55
    }
 
56
 
 
57
    class scoped_lock;
 
58
    friend class scoped_lock;
 
59
 
 
60
    class scoped_lock
 
61
    {
 
62
    private:
 
63
 
 
64
        pthread_mutex_t & m_;
 
65
 
 
66
        scoped_lock(scoped_lock const &);
 
67
        scoped_lock & operator=(scoped_lock const &);
 
68
 
 
69
    public:
 
70
 
 
71
        scoped_lock(lightweight_mutex & m): m_(m.m_)
 
72
        {
 
73
            BOOST_VERIFY( pthread_mutex_lock( &m_ ) == 0 );
 
74
        }
 
75
 
 
76
        ~scoped_lock()
 
77
        {
 
78
            BOOST_VERIFY( pthread_mutex_unlock( &m_ ) == 0 );
 
79
        }
 
80
    };
 
81
};
 
82
 
 
83
} // namespace detail
 
84
 
 
85
} // namespace boost
 
86
 
 
87
#endif // #ifndef BOOST_SMART_PTR_DETAIL_LWM_PTHREADS_HPP_INCLUDED