gruel::send can now send to a pmt.
authorEric Blossom <eb@comsec.com>
Wed, 19 Aug 2009 04:02:13 +0000 (21:02 -0700)
committerEric Blossom <eb@comsec.com>
Wed, 19 Aug 2009 04:02:13 +0000 (21:02 -0700)
gruel/src/include/gruel/msg_passing.h
gruel/src/lib/pmt/qa_pmt_prims.cc

index 6110584997b1c02efbc804da2d0083215d1da391..ebbeca815aab34bce3bff635b91b5dce3bd733b5 100644 (file)
@@ -46,7 +46,27 @@ namespace gruel {
   static inline pmt::pmt_t
   send(msg_accepter_sptr accepter, const pmt::pmt_t &msg)
   {
-    return accepter->post(msg);
+    accepter->post(msg);
+    return msg;
+  }
+
+  /*!
+   * \brief send message to msg_accepter
+   *
+   * \param accepter is the target of the send.
+   * \param msg is the message to send.  It's usually a pmt tuple.
+   *
+   * Sending a message is an asynchronous operation.  The \p send
+   * call will not wait for the message either to arrive at the
+   * destination or to be received.
+   *
+   * \returns msg
+   */
+  static inline pmt::pmt_t
+  send(msg_accepter *accepter, const pmt::pmt_t &msg)
+  {
+    accepter->post(msg);
+    return msg;
   }
 
   /*!
@@ -64,7 +84,8 @@ namespace gruel {
   static inline pmt::pmt_t
   send(msg_accepter &accepter, const pmt::pmt_t &msg)
   {
-    return accepter.post(msg);
+    accepter.post(msg);
+    return msg;
   }
 
   /*!
@@ -79,9 +100,11 @@ namespace gruel {
    *
    * \returns msg
    */
-  pmt::pmt_t
-  send(const pmt_t &accepter, const pmt::pmt_t &msg);
-
+  static inline pmt::pmt_t
+  send(pmt::pmt_t accepter, const pmt::pmt_t &msg)
+  {
+    return send(pmt_msg_accepter_ref(accepter), msg);
+  }
 
 } /* namespace gruel */
 
index e2d6ec4c624d12d27532b52a7595dc940741a513..04fdc1a433986070b4e89d9c93db45d16f0ab127 100644 (file)
@@ -22,8 +22,7 @@
 
 #include <qa_pmt_prims.h>
 #include <cppunit/TestAssert.h>
-#include <gruel/pmt.h>
-#include <gruel/msg_accepter.h>
+#include <gruel/msg_passing.h>
 #include <stdio.h>
 #include <sstream>
 
@@ -479,6 +478,12 @@ qa_pmt_prims::test_msg_accepter()
 
   CPPUNIT_ASSERT_THROW(pmt_msg_accepter_ref(sym), pmt_wrong_type);
   CPPUNIT_ASSERT_THROW(pmt_msg_accepter_ref(p0),  pmt_wrong_type);
+
+  // just confirm interfaces on send are OK
+  gruel::send(ma0.get(), sym);
+  gruel::send(ma0, sym);
+  gruel::send(p1, sym);
+
 }
 
 // ------------------------------------------------------------------------