blob: 7928566e8b1689b02284cfd86fefa8389c686758 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- PThreadEvent.h ------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Created by Greg Clayton on 6/16/07.
11//
12//===----------------------------------------------------------------------===//
13
14#ifndef __PThreadEvent_h__
15#define __PThreadEvent_h__
16#include "PThreadMutex.h"
17#include "PThreadCondition.h"
18#include <stdint.h>
19#include <time.h>
20
21class PThreadEvent
22{
23public:
24 PThreadEvent (uint32_t bits = 0, uint32_t validBits = 0);
25 ~PThreadEvent ();
26
27 uint32_t NewEventBit ();
28 void FreeEventBits (const uint32_t mask);
29
30 void ReplaceEventBits (const uint32_t bits);
31 uint32_t GetEventBits () const;
32 void SetEvents (const uint32_t mask);
33 void ResetEvents (const uint32_t mask);
34 // Wait for events to be set or reset. These functions take an optional
35 // timeout value. If timeout is NULL an infinite timeout will be used.
36 uint32_t WaitForSetEvents (const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
37 uint32_t WaitForEventsToReset(const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
38
39 uint32_t GetResetAckMask () const { return m_reset_ack_mask; }
40 uint32_t SetResetAckMask (uint32_t mask) { return m_reset_ack_mask = mask; }
41 uint32_t WaitForResetAck (const uint32_t mask, const struct timespec *timeout_abstime = NULL) const;
42protected:
43 //----------------------------------------------------------------------
44 // pthread condition and mutex variable to controll access and allow
45 // blocking between the main thread and the spotlight index thread.
46 //----------------------------------------------------------------------
47 mutable PThreadMutex m_mutex;
48 mutable PThreadCondition m_set_condition;
49 mutable PThreadCondition m_reset_condition;
50 uint32_t m_bits;
51 uint32_t m_validBits;
52 uint32_t m_reset_ack_mask;
53private:
54 PThreadEvent(const PThreadEvent&); // Outlaw copy contructor
55 PThreadEvent& operator=(const PThreadEvent& rhs);
56
57};
58
59#endif // #ifndef __PThreadEvent_h__