tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

rccv.h (1989B)


      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/. */
      5 
      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 */
     21 
     22 #if defined(_RCCOND_H)
     23 #else
     24 #define _RCCOND_H
     25 
     26 #include "rclock.h"
     27 #include "rcbase.h"
     28 #include "rcinrval.h"
     29 
     30 struct PRCondVar;
     31 
     32 class PR_IMPLEMENT(RCCondition): public RCBase
     33 {
     34 public:
     35    RCCondition(RCLock*);           /* associates CV with a lock and infinite tmo */
     36    virtual ~RCCondition();
     37 
     38    virtual PRStatus Wait();        /* applies object's current timeout */
     39 
     40    virtual PRStatus Notify();      /* perhaps ready one thread */
     41    virtual PRStatus Broadcast();   /* perhaps ready many threads */
     42 
     43    virtual PRStatus SetTimeout(const RCInterval&);
     44    /* set object's current timeout value */
     45 
     46 private:
     47    PRCondVar *cv;
     48    RCInterval timeout;
     49 
     50    RCCondition();
     51    RCCondition(const RCCondition&);
     52    void operator=(const RCCondition&);
     53 
     54 public:
     55    RCInterval GetTimeout() const;
     56 };  /* RCCondition */
     57 
     58 inline RCCondition::RCCondition(): RCBase() { }
     59 inline RCCondition::RCCondition(const RCCondition&): RCBase() { }
     60 inline void RCCondition::operator=(const RCCondition&) { }
     61 
     62 #endif /* defined(_RCCOND_H) */
     63 
     64 /* RCCond.h */