Index: mojo/system/simple_dispatcher.cc |
diff --git a/mojo/system/simple_dispatcher.cc b/mojo/system/simple_dispatcher.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ce2baefe2dd5402a00559294ef60ba3bafb64c7d |
--- /dev/null |
+++ b/mojo/system/simple_dispatcher.cc |
@@ -0,0 +1,49 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "mojo/system/simple_dispatcher.h" |
+ |
+#include "base/logging.h" |
+ |
+namespace mojo { |
+namespace system { |
+ |
+SimpleDispatcher::SimpleDispatcher() { |
+} |
+ |
+SimpleDispatcher::~SimpleDispatcher() { |
+} |
+ |
+void SimpleDispatcher::StateChangedNoLock() { |
+ lock().AssertAcquired(); |
+ waiter_list_.AwakeWaitersForStateChange(SatisfiedFlagsNoLock(), |
+ SatisfiableFlagsNoLock()); |
+} |
+ |
+void SimpleDispatcher::CancelAllWaitersNoLock() { |
+ lock().AssertAcquired(); |
+ waiter_list_.CancelAllWaiters(); |
+} |
+ |
+MojoResult SimpleDispatcher::AddWaiterImplNoLock(Waiter* waiter, |
+ MojoWaitFlags flags, |
+ MojoResult wake_result) { |
+ lock().AssertAcquired(); |
+ |
+ if ((flags & SatisfiedFlagsNoLock())) |
+ return MOJO_RESULT_ALREADY_EXISTS; |
+ if (!(flags & SatisfiableFlagsNoLock())) |
+ return MOJO_RESULT_FAILED_PRECONDITION; |
+ |
+ waiter_list_.AddWaiter(waiter, flags, wake_result); |
+ return MOJO_RESULT_OK; |
+} |
+ |
+void SimpleDispatcher::RemoveWaiterImplNoLock(Waiter* waiter) { |
+ lock().AssertAcquired(); |
+ waiter_list_.RemoveWaiter(waiter); |
+} |
+ |
+} // namespace system |
+} // namespace mojo |