[telepathy-gabble/master] Use switches in Hold state machine

Will Thompson will.thompson at collabora.co.uk
Mon Jun 1 08:48:59 PDT 2009


I think this is clearer than the chained if-else-if-else-if-else-s used
before.
---
 src/media-channel-hold.c |   56 ++++++++++++++++++++++-----------------------
 1 files changed, 27 insertions(+), 29 deletions(-)

diff --git a/src/media-channel-hold.c b/src/media-channel-hold.c
index f5704fe..1733c5f 100644
--- a/src/media-channel-hold.c
+++ b/src/media-channel-hold.c
@@ -62,52 +62,51 @@ stream_hold_state_changed (GabbleMediaStream *stream G_GNUC_UNUSED,
   if (all_held)
     {
       /* Move to state HELD */
-
-      if (priv->hold_state == TP_LOCAL_HOLD_STATE_HELD)
+      switch (priv->hold_state)
         {
+        case TP_LOCAL_HOLD_STATE_HELD:
           /* nothing changed */
           return;
-        }
-      else if (priv->hold_state == TP_LOCAL_HOLD_STATE_PENDING_UNHOLD)
-        {
+
+        case TP_LOCAL_HOLD_STATE_PENDING_UNHOLD:
           /* This can happen if the user asks us to hold, then changes their
            * mind. We make no particular guarantees about stream states when
            * in PENDING_UNHOLD state, so keep claiming to be in that state */
           return;
-        }
-      else if (priv->hold_state == TP_LOCAL_HOLD_STATE_PENDING_HOLD)
-        {
+
+        case TP_LOCAL_HOLD_STATE_PENDING_HOLD:
           /* We wanted to hold, and indeed we have. Yay! Keep whatever
            * reason code we used for going to PENDING_HOLD */
           priv->hold_state = TP_LOCAL_HOLD_STATE_HELD;
-        }
-      else
-        {
+          break;
+
+        case TP_LOCAL_HOLD_STATE_UNHELD:
           /* We were previously UNHELD. So why have we gone on hold now? */
           DEBUG ("Unexpectedly entered HELD state!");
           priv->hold_state = TP_LOCAL_HOLD_STATE_HELD;
           priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE;
+          break;
         }
     }
   else if (any_held)
     {
-      if (priv->hold_state == TP_LOCAL_HOLD_STATE_UNHELD)
+      switch (priv->hold_state)
         {
+        case TP_LOCAL_HOLD_STATE_UNHELD:
           /* The streaming client has spontaneously changed its stream
            * state. Why? We just don't know */
           DEBUG ("Unexpectedly entered PENDING_UNHOLD state!");
           priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_UNHOLD;
           priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE;
-        }
-      else if (priv->hold_state == TP_LOCAL_HOLD_STATE_HELD)
-        {
+          break;
+
+        case TP_LOCAL_HOLD_STATE_HELD:
           /* Likewise */
           DEBUG ("Unexpectedly entered PENDING_HOLD state!");
           priv->hold_state = TP_LOCAL_HOLD_STATE_PENDING_HOLD;
           priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE;
-        }
-      else
-        {
+
+        default:
           /* nothing particularly interesting - we're trying to change hold
            * state already, so nothing to signal */
           return;
@@ -116,31 +115,30 @@ stream_hold_state_changed (GabbleMediaStream *stream G_GNUC_UNUSED,
   else
     {
       /* Move to state UNHELD */
-
-      if (priv->hold_state == TP_LOCAL_HOLD_STATE_UNHELD)
+      switch (priv->hold_state)
         {
+        case TP_LOCAL_HOLD_STATE_UNHELD:
           /* nothing changed */
           return;
-        }
-      else if (priv->hold_state == TP_LOCAL_HOLD_STATE_PENDING_HOLD)
-        {
+
+        case TP_LOCAL_HOLD_STATE_PENDING_HOLD:
           /* This can happen if the user asks us to unhold, then changes their
            * mind. We make no particular guarantees about stream states when
            * in PENDING_HOLD state, so keep claiming to be in that state */
           return;
-        }
-      else if (priv->hold_state == TP_LOCAL_HOLD_STATE_PENDING_UNHOLD)
-        {
+
+        case TP_LOCAL_HOLD_STATE_PENDING_UNHOLD:
           /* We wanted to hold, and indeed we have. Yay! Keep whatever
            * reason code we used for going to PENDING_UNHOLD */
           priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD;
-        }
-      else
-        {
+          break;
+
+        case TP_LOCAL_HOLD_STATE_HELD:
           /* We were previously HELD. So why have we gone off hold now? */
           DEBUG ("Unexpectedly entered UNHELD state!");
           priv->hold_state = TP_LOCAL_HOLD_STATE_UNHELD;
           priv->hold_state_reason = TP_LOCAL_HOLD_STATE_REASON_NONE;
+          break;
         }
 
       /* Tell the peer what's happened. */
-- 
1.5.6.5




More information about the telepathy-commits mailing list