• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/basictypes.h"
11 #include "mojo/system/dispatcher.h"
12 #include "mojo/system/handle_signals_state.h"
13 #include "mojo/system/system_impl_export.h"
14 #include "mojo/system/waiter_list.h"
15 
16 namespace mojo {
17 namespace system {
18 
19 // A base class for simple dispatchers. "Simple" means that there's a one-to-one
20 // correspondence between handles and dispatchers (see the explanatory comment
21 // in core.cc). This class implements the standard waiter-signalling mechanism
22 // in that case.
23 class MOJO_SYSTEM_IMPL_EXPORT SimpleDispatcher : public Dispatcher {
24  protected:
25   SimpleDispatcher();
26   virtual ~SimpleDispatcher();
27 
28   // To be called by subclasses when the state changes (so
29   // |GetHandleSignalsStateNoLock()| should be checked again). Must be called
30   // under lock.
31   void HandleSignalsStateChangedNoLock();
32 
33   // Never called after the dispatcher has been closed; called under |lock_|.
34   virtual HandleSignalsState GetHandleSignalsStateNoLock() const = 0;
35 
36   // |Dispatcher| protected methods:
37   virtual void CancelAllWaitersNoLock() OVERRIDE;
38   virtual MojoResult AddWaiterImplNoLock(Waiter* waiter,
39                                          MojoHandleSignals signals,
40                                          uint32_t context) OVERRIDE;
41   virtual void RemoveWaiterImplNoLock(Waiter* waiter) 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