Wed, 31 Dec 2014 06:55:46 +0100
Added tag TORBROWSER_REPLICA for changeset 6474c204b198
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 /*
7 ** RCCondition - C++ wrapper around NSPR's PRCondVar
8 **
9 ** Conditions have a notion of timeouts. A thread that waits on a condition
10 ** will resume execution when the condition is notified OR when a specified
11 ** interval of time has expired.
12 **
13 ** Most applications don't adjust the timeouts on conditions. The literature
14 ** would argue that all threads waiting on a single condition must have the
15 ** same semantics. But if an application wishes to modify the timeout with
16 ** (perhaps) each wait call, that modification should be done consistantly
17 ** and under protection of the condition's associated lock.
18 **
19 ** The default timeout is infinity.
20 */
22 #if defined(_RCCOND_H)
23 #else
24 #define _RCCOND_H
26 #include "rclock.h"
27 #include "rcbase.h"
28 #include "rcinrval.h"
30 struct PRCondVar;
32 class PR_IMPLEMENT(RCCondition): public RCBase
33 {
34 public:
35 RCCondition(RCLock*); /* associates CV with a lock and infinite tmo */
36 virtual ~RCCondition();
38 virtual PRStatus Wait(); /* applies object's current timeout */
40 virtual PRStatus Notify(); /* perhaps ready one thread */
41 virtual PRStatus Broadcast(); /* perhaps ready many threads */
43 virtual PRStatus SetTimeout(const RCInterval&);
44 /* set object's current timeout value */
46 private:
47 PRCondVar *cv;
48 RCInterval timeout;
50 RCCondition();
51 RCCondition(const RCCondition&);
52 void operator=(const RCCondition&);
54 public:
55 RCInterval GetTimeout() const;
56 }; /* RCCondition */
58 inline RCCondition::RCCondition(): RCBase() { }
59 inline RCCondition::RCCondition(const RCCondition&): RCBase() { }
60 inline void RCCondition::operator=(const RCCondition&) { }
62 #endif /* defined(_RCCOND_H) */
64 /* RCCond.h */