124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- PThreadCondition.h --------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  Created by Greg Clayton on 6/16/07.
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef __PThreadCondition_h__
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define __PThreadCondition_h__
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <pthread.h>
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass PThreadCondition
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    PThreadCondition()
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::pthread_cond_init (&m_condition, NULL);
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~PThreadCondition()
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        ::pthread_cond_destroy (&m_condition);
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    pthread_cond_t *Condition()
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return &m_condition;
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int Broadcast()
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return ::pthread_cond_broadcast (&m_condition);
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int Signal()
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return ::pthread_cond_signal (&m_condition);
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    pthread_cond_t        m_condition;
5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
54