Home | History | Annotate | Download | only in system
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
      6 #define MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
      7 
      8 #include <list>
      9 
     10 #include "base/macros.h"
     11 #include "mojo/system/dispatcher.h"
     12 #include "mojo/system/system_impl_export.h"
     13 #include "mojo/system/waiter_list.h"
     14 
     15 namespace mojo {
     16 namespace system {
     17 
     18 // A base class for simple dispatchers. "Simple" means that there's a one-to-one
     19 // correspondence between handles and dispatchers (see the explanatory comment
     20 // in core.cc). This class implements the standard waiter-signalling mechanism
     21 // in that case.
     22 class MOJO_SYSTEM_IMPL_EXPORT SimpleDispatcher : public Dispatcher {
     23  protected:
     24   SimpleDispatcher();
     25   virtual ~SimpleDispatcher();
     26 
     27   // To be called by subclasses when the state changes (so
     28   // |GetHandleSignalsStateImplNoLock()| should be checked again). Must be
     29   // called under lock.
     30   void HandleSignalsStateChangedNoLock();
     31 
     32   // |Dispatcher| protected methods:
     33   virtual void CancelAllWaitersNoLock() OVERRIDE;
     34   virtual MojoResult AddWaiterImplNoLock(
     35       Waiter* waiter,
     36       MojoHandleSignals signals,
     37       uint32_t context,
     38       HandleSignalsState* signals_state) OVERRIDE;
     39   virtual void RemoveWaiterImplNoLock(
     40       Waiter* waiter,
     41       HandleSignalsState* signals_state) OVERRIDE;
     42 
     43  private:
     44   // Protected by |lock()|:
     45   WaiterList waiter_list_;
     46 
     47   DISALLOW_COPY_AND_ASSIGN(SimpleDispatcher);
     48 };
     49 
     50 }  // namespace system
     51 }  // namespace mojo
     52 
     53 #endif  // MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
     54