Home | History | Annotate | Download | only in system
      1 // Copyright 2016 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_EDK_SYSTEM_WATCHER_SET_H_
      6 #define MOJO_EDK_SYSTEM_WATCHER_SET_H_
      7 
      8 #include <unordered_map>
      9 
     10 #include "base/callback.h"
     11 #include "base/macros.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "mojo/edk/system/handle_signals_state.h"
     14 #include "mojo/edk/system/watcher.h"
     15 #include "mojo/public/c/system/types.h"
     16 
     17 namespace mojo {
     18 namespace edk {
     19 
     20 // A WatcherSet maintains a set of Watchers attached to a single handle and
     21 // keyed on an arbitrary user context.
     22 class WatcherSet {
     23  public:
     24   WatcherSet();
     25   ~WatcherSet();
     26 
     27   // Notifies all Watchers of a state change.
     28   void NotifyForStateChange(const HandleSignalsState& state);
     29 
     30   // Notifies all Watchers that their watched handle has been closed.
     31   void NotifyClosed();
     32 
     33   // Adds a new watcher to watch for signals in |signals| to be satisfied or
     34   // unsatisfiable. |current_state| is the current signals state of the
     35   // handle being watched.
     36   MojoResult Add(MojoHandleSignals signals,
     37                  const Watcher::WatchCallback& callback,
     38                  uintptr_t context,
     39                  const HandleSignalsState& current_state);
     40 
     41   // Removes a watcher from the set.
     42   MojoResult Remove(uintptr_t context);
     43 
     44  private:
     45   // A map of watchers keyed on context value.
     46   std::unordered_map<uintptr_t, scoped_refptr<Watcher>> watchers_;
     47 
     48   DISALLOW_COPY_AND_ASSIGN(WatcherSet);
     49 };
     50 
     51 }  // namespace edk
     52 }  // namespace mojo
     53 
     54 #endif  // MOJO_EDK_SYSTEM_WATCHER_SET_H_
     55