Fixed Demo Mainloop
authorPhilip Rauwolf <rauwolf@itestra.de>
Wed, 7 Aug 2013 12:54:45 +0000 (14:54 +0200)
committerStefan Laner <laner@itestra.de>
Wed, 7 Aug 2013 13:08:33 +0000 (15:08 +0200)
Conflicts:
src/test/DemoMainLoop.h

src/test/DBusProxyTest.cpp
src/test/DemoMainLoop.h

index a45f6f2..3fc2c23 100644 (file)
@@ -8,6 +8,10 @@
 #define _GLIBCXX_USE_NANOSLEEP
 #endif
 
+#ifndef COMMONAPI_INTERNAL_COMPILATION
+#define COMMONAPI_INTERNAL_COMPILATION
+#endif
+
 #include <CommonAPI/DBus/DBusInputStream.h>
 #include <CommonAPI/DBus/DBusMessage.h>
 #include <CommonAPI/DBus/DBusProxy.h>
 #include <commonapi/tests/TestInterfaceDBusStubAdapter.h>
 #include <commonapi/tests/TestInterfaceStubDefault.h>
 
+#ifndef COMMONAPI_INTERNAL_COMPILATION
+#define COMMONAPI_INTERNAL_COMPILATION
+#endif
+
 #include "DBusTestUtils.h"
 
 #include <gtest/gtest.h>
index 4cbf47a..335c102 100644 (file)
@@ -9,7 +9,11 @@
 #define DEMO_MAIN_LOOP_H_
 
 
+#if !defined (COMMONAPI_INTERNAL_COMPILATION)
+#define COMMONAPI_INTERNAL_COMPILATION
+#endif
 #include <CommonAPI/MainLoopContext.h>
+#undef COMMONAPI_INTERNAL_COMPILATION
 
 #include <vector>
 #include <set>
@@ -63,7 +67,10 @@ class MainLoop {
     }
 
     /**
-     * The given timeout will be overridden if a timeout-event is present that defines an earlier ready time.
+     * \brief Runs the mainloop indefinitely until stop() is called.
+     *
+     * Runs the mainloop indefinitely until stop() is called. The given timeout (milliseconds)
+     * will be overridden if a timeout-event is present that defines an earlier ready time.
      */
     void run(const int64_t& timeoutInterval = TIMEOUT_INFINITE) {
         running_ = true;
@@ -142,7 +149,7 @@ class MainLoop {
             (*fileDescriptor).revents = 0;
         }
 
-        auto numReadyFileDescriptors = ::poll(&(managedFileDescriptors_[0]), managedFileDescriptors_.size(), currentMinimalTimeoutInterval_);
+        size_t numReadyFileDescriptors = ::poll(&(managedFileDescriptors_[0]), managedFileDescriptors_.size(), currentMinimalTimeoutInterval_);
 
         // If no FileDescriptors are ready, poll returned because of a timeout that has expired.
         // The only case in which this is not the reason is when the timeout handed in "prepare"
@@ -170,14 +177,14 @@ class MainLoop {
     bool check() {
         //The first file descriptor always is the loop's wakeup-descriptor. All others need to be linked to a watch.
         for (auto fileDescriptor = managedFileDescriptors_.begin() + 1; fileDescriptor != managedFileDescriptors_.end(); ++fileDescriptor) {
-            for(auto registeredWatchIterator = registeredWatches_.begin();
+            for (auto registeredWatchIterator = registeredWatches_.begin();
                         registeredWatchIterator != registeredWatches_.end();
                         registeredWatchIterator++) {
                 const auto& correspondingWatchPriority = registeredWatchIterator->first;
                 const auto& correspondingWatchPair = registeredWatchIterator->second;
 
                 if (std::get<0>(correspondingWatchPair) == fileDescriptor->fd && fileDescriptor->revents) {
-                    watchesToDispatch_.insert( { correspondingWatchPriority, {std::get<1>(correspondingWatchPair), fileDescriptor->revents} } );
+                    watchesToDispatch_.insert( { correspondingWatchPriority, {std::get<1>(correspondingWatchPair)} } );
                 }
             }
         }
@@ -201,18 +208,9 @@ class MainLoop {
         for (auto watchIterator = watchesToDispatch_.begin();
                 watchIterator != watchesToDispatch_.end();
                 watchIterator++) {
-            Watch* watch = std::get<0>(watchIterator->second);
-            const unsigned int flags = std::get<1>(watchIterator->second);
-            const auto& dependentSources = watch->getDependentDispatchSources();
+            Watch* watch = watchIterator->second;
+            const unsigned int flags = 7;
             watch->dispatch(flags);
-
-            for (auto dependentSourceIterator = dependentSources.begin();
-                    dependentSourceIterator != dependentSources.end();
-                    dependentSourceIterator++) {
-                if((*dependentSourceIterator)->check()) {
-                    sourcesToDispatch_.insert( {watchIterator->first, *dependentSourceIterator} );
-                }
-            }
         }
 
         breakLoop_ = false;
@@ -276,7 +274,7 @@ class MainLoop {
                 watchIterator != registeredWatches_.end();
                 watchIterator++) {
 
-            if(watchIterator->second.first == watch->getAssociatedFileDescriptor().fd) {
+            if(watchIterator->second.second == watch) {
                 registeredWatches_.erase(watchIterator);
                 break;
             }
@@ -313,7 +311,7 @@ class MainLoop {
     std::multimap<DispatchPriority, Timeout*> registeredTimeouts_;
 
     std::set<std::pair<DispatchPriority, DispatchSource*>> sourcesToDispatch_;
-    std::set<std::pair<DispatchPriority, std::pair<Watch*, unsigned short>>> watchesToDispatch_;
+    std::set<std::pair<DispatchPriority, Watch*>> watchesToDispatch_;
     std::set<std::pair<DispatchPriority, Timeout*>> timeoutsToDispatch_;
 
     DispatchSourceListenerSubscription dispatchSourceListenerSubscription_;