You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2016/01/04 11:43:22 UTC

[2/5] mesos git commit: Cleaned up STL I/O includes in public headers (including v1).

Cleaned up STL I/O includes in public headers (including v1).

Where possible moved `operator<<` definitions and functions using
streams to implementation files and included <iosfwd> in headers.
Also removed unused I/O includes, added necessary includes, and
cleaned up `std::` prefixes and blank lines.

Review: https://reviews.apache.org/r/41511/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/820640de
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/820640de
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/820640de

Branch: refs/heads/master
Commit: 820640de06f527ecca43785117f2b76541513c47
Parents: e8d3ab1
Author: Alexander Rukletsov <ru...@gmail.com>
Authored: Mon Jan 4 02:25:33 2016 -0800
Committer: Michael Park <mp...@apache.org>
Committed: Mon Jan 4 02:37:22 2016 -0800

----------------------------------------------------------------------
 include/mesos/resources.hpp    |  13 ++--
 include/mesos/type_utils.hpp   | 134 ++++++++----------------------------
 include/mesos/v1/mesos.hpp     | 134 ++++++++----------------------------
 include/mesos/v1/resources.hpp |  13 ++--
 include/mesos/v1/values.hpp    |   2 +
 include/mesos/values.hpp       |   2 +
 src/common/resources.cpp       |  11 +++
 src/common/type_utils.cpp      | 133 +++++++++++++++++++++++++++++++++++
 src/v1/mesos.cpp               | 131 +++++++++++++++++++++++++++++++++++
 src/v1/resources.cpp           |  11 +++
 10 files changed, 358 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/resources.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/resources.hpp b/include/mesos/resources.hpp
index 9c8bfb0..cc8fef9 100644
--- a/include/mesos/resources.hpp
+++ b/include/mesos/resources.hpp
@@ -18,11 +18,13 @@
 #define __RESOURCES_HPP__
 
 #include <map>
-#include <iostream>
+#include <iosfwd>
 #include <set>
 #include <string>
 #include <vector>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/mesos.hpp>
 #include <mesos/type_utils.hpp>
 #include <mesos/values.hpp>
@@ -369,15 +371,14 @@ private:
 
 
 std::ostream& operator<<(std::ostream& stream, const Resource& resource);
+
+
 std::ostream& operator<<(std::ostream& stream, const Resources& resources);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const google::protobuf::RepeatedPtrField<Resource>& resources)
-{
-  return stream << Resources(resources);
-}
+    const google::protobuf::RepeatedPtrField<Resource>& resources);
 
 
 inline Resources operator+(

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/type_utils.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/type_utils.hpp b/include/mesos/type_utils.hpp
index b370b51..efe2b1d 100644
--- a/include/mesos/type_utils.hpp
+++ b/include/mesos/type_utils.hpp
@@ -17,10 +17,14 @@
 #ifndef __MESOS_TYPE_UTILS_H__
 #define __MESOS_TYPE_UTILS_H__
 
-#include <ostream>
+#include <iosfwd>
+#include <string>
+#include <vector>
 
 #include <boost/functional/hash.hpp>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/mesos.hpp>
 
 #include <mesos/module/module.hpp>
@@ -246,141 +250,61 @@ inline bool operator<(const TaskID& left, const TaskID& right)
 }
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ContainerID& containerId)
-{
-  return stream << containerId.value();
-}
+std::ostream& operator<<(std::ostream& stream, const ContainerID& containerId);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const ContainerInfo& containerInfo)
-{
-  return stream << containerInfo.DebugString();
-}
+    const ContainerInfo& containerInfo);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ExecutorID& executorId)
-{
-  return stream << executorId.value();
-}
+std::ostream& operator<<(std::ostream& stream, const ExecutorID& executorId);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ExecutorInfo& executor)
-{
-  return stream << executor.DebugString();
-}
-
+std::ostream& operator<<(std::ostream& stream, const ExecutorInfo& executor);
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const FrameworkID& frameworkId)
-{
-  return stream << frameworkId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const FrameworkID& frameworkId);
 
-inline std::ostream& operator<<(std::ostream& stream, const MasterInfo& master)
-{
-  return stream << master.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const MasterInfo& master);
 
-inline std::ostream& operator<<(std::ostream& stream, const OfferID& offerId)
-{
-  return stream << offerId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const OfferID& offerId);
 
-inline std::ostream& operator<<(std::ostream& stream, const RateLimits& limits)
-{
-  return stream << limits.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const RateLimits& limits);
 
-inline std::ostream& operator<<(std::ostream& stream, const SlaveID& slaveId)
-{
-  return stream << slaveId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const SlaveID& slaveId);
 
-inline std::ostream& operator<<(std::ostream& stream, const SlaveInfo& slave)
-{
-  return stream << slave.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const SlaveInfo& slave);
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskID& taskId)
-{
-  return stream << taskId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const TaskID& taskId);
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const MachineID& machineId)
-{
-  if (machineId.has_hostname() && machineId.has_ip()) {
-    return stream << machineId.hostname() << " (" << machineId.ip() << ")";
-  }
 
-  // If only a hostname is present.
-  if (machineId.has_hostname()) {
-    return stream << machineId.hostname();
-  } else { // If there is no hostname, then there is an IP.
-    return stream << "(" << machineId.ip() << ")";
-  }
-}
+std::ostream& operator<<(std::ostream& stream, const MachineID& machineId);
 
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskInfo& task)
-{
-  return stream << task.DebugString();
-}
+std::ostream& operator<<(std::ostream& stream, const TaskInfo& task);
 
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskState& state)
-{
-  return stream << TaskState_Name(state);
-}
+std::ostream& operator<<(std::ostream& stream, const TaskState& state);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const std::vector<TaskID>& taskIds)
-{
-  stream << "[ ";
-  for (auto it = taskIds.begin(); it != taskIds.end(); ++it) {
-    if (it != taskIds.begin()) {
-      stream << ", ";
-    }
-    stream << *it;
-  }
-  stream << " ]";
-  return stream;
-}
+    const std::vector<TaskID>& taskIds);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const FrameworkInfo::Capability& capability)
-{
-  return stream << FrameworkInfo::Capability::Type_Name(capability.type());
-}
+    const FrameworkInfo::Capability& capability);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const Image::Type& imageType)
-{
-  return stream << Image::Type_Name(imageType);
-}
+std::ostream& operator<<(std::ostream& stream, const Image::Type& imageType);
 
 
 template <typename T>
@@ -400,13 +324,9 @@ inline std::ostream& operator<<(
 }
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const hashmap<std::string, std::string>& map)
-{
-  stream << stringify(map);
-  return stream;
-}
+    const hashmap<std::string, std::string>& map);
 
 } // namespace mesos {
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/v1/mesos.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/v1/mesos.hpp b/include/mesos/v1/mesos.hpp
index 80e7604..961042d 100644
--- a/include/mesos/v1/mesos.hpp
+++ b/include/mesos/v1/mesos.hpp
@@ -17,10 +17,14 @@
 #ifndef __MESOS_V1_HPP__
 #define __MESOS_V1_HPP__
 
-#include <ostream>
+#include <iosfwd>
+#include <string>
+#include <vector>
 
 #include <boost/functional/hash.hpp>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/v1/mesos.pb.h> // ONLY USEFUL AFTER RUNNING PROTOC.
 
 #include <stout/strings.hpp>
@@ -240,141 +244,61 @@ inline bool operator<(const TaskID& left, const TaskID& right)
 }
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ContainerID& containerId)
-{
-  return stream << containerId.value();
-}
+std::ostream& operator<<(std::ostream& stream, const ContainerID& containerId);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const ContainerInfo& containerInfo)
-{
-  return stream << containerInfo.DebugString();
-}
+    const ContainerInfo& containerInfo);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ExecutorID& executorId)
-{
-  return stream << executorId.value();
-}
+std::ostream& operator<<(std::ostream& stream, const ExecutorID& executorId);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const ExecutorInfo& executor)
-{
-  return stream << executor.DebugString();
-}
-
+std::ostream& operator<<(std::ostream& stream, const ExecutorInfo& executor);
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const FrameworkID& frameworkId)
-{
-  return stream << frameworkId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const FrameworkID& frameworkId);
 
-inline std::ostream& operator<<(std::ostream& stream, const MasterInfo& master)
-{
-  return stream << master.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const MasterInfo& master);
 
-inline std::ostream& operator<<(std::ostream& stream, const OfferID& offerId)
-{
-  return stream << offerId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const OfferID& offerId);
 
-inline std::ostream& operator<<(std::ostream& stream, const RateLimits& limits)
-{
-  return stream << limits.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const RateLimits& limits);
 
-inline std::ostream& operator<<(std::ostream& stream, const AgentID& agentId)
-{
-  return stream << agentId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const AgentID& agentId);
 
-inline std::ostream& operator<<(std::ostream& stream, const AgentInfo& agent)
-{
-  return stream << agent.DebugString();
-}
 
+std::ostream& operator<<(std::ostream& stream, const AgentInfo& agent);
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskID& taskId)
-{
-  return stream << taskId.value();
-}
 
+std::ostream& operator<<(std::ostream& stream, const TaskID& taskId);
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const MachineID& machineId)
-{
-  if (machineId.has_hostname() && machineId.has_ip()) {
-    return stream << machineId.hostname() << " (" << machineId.ip() << ")";
-  }
 
-  // If only a hostname is present.
-  if (machineId.has_hostname()) {
-    return stream << machineId.hostname();
-  } else { // If there is no hostname, then there is an IP.
-    return stream << "(" << machineId.ip() << ")";
-  }
-}
+std::ostream& operator<<(std::ostream& stream, const MachineID& machineId);
 
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskInfo& task)
-{
-  return stream << task.DebugString();
-}
+std::ostream& operator<<(std::ostream& stream, const TaskInfo& task);
 
 
-inline std::ostream& operator<<(std::ostream& stream, const TaskState& state)
-{
-  return stream << TaskState_Name(state);
-}
+std::ostream& operator<<(std::ostream& stream, const TaskState& state);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const std::vector<TaskID>& taskIds)
-{
-  stream << "[ ";
-  for (auto it = taskIds.begin(); it != taskIds.end(); ++it) {
-    if (it != taskIds.begin()) {
-      stream << ", ";
-    }
-    stream << *it;
-  }
-  stream << " ]";
-  return stream;
-}
+    const std::vector<TaskID>& taskIds);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const FrameworkInfo::Capability& capability)
-{
-  return stream << FrameworkInfo::Capability::Type_Name(capability.type());
-}
+    const FrameworkInfo::Capability& capability);
 
 
-inline std::ostream& operator<<(
-    std::ostream& stream,
-    const Image::Type& imageType)
-{
-  return stream << Image::Type_Name(imageType);
-}
+std::ostream& operator<<(std::ostream& stream, const Image::Type& imageType);
 
 
 template <typename T>
@@ -394,13 +318,9 @@ inline std::ostream& operator<<(
 }
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const hashmap<std::string, std::string>& map)
-{
-  stream << stringify(map);
-  return stream;
-}
+    const hashmap<std::string, std::string>& map);
 
 } // namespace v1 {
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/v1/resources.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/v1/resources.hpp b/include/mesos/v1/resources.hpp
index db87c99..f489297 100644
--- a/include/mesos/v1/resources.hpp
+++ b/include/mesos/v1/resources.hpp
@@ -18,11 +18,13 @@
 #define __MESOS_V1_RESOURCES_HPP__
 
 #include <map>
-#include <iostream>
+#include <iosfwd>
 #include <set>
 #include <string>
 #include <vector>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/v1/mesos.hpp>
 #include <mesos/v1/values.hpp>
 
@@ -369,15 +371,14 @@ private:
 
 
 std::ostream& operator<<(std::ostream& stream, const Resource& resource);
+
+
 std::ostream& operator<<(std::ostream& stream, const Resources& resources);
 
 
-inline std::ostream& operator<<(
+std::ostream& operator<<(
     std::ostream& stream,
-    const google::protobuf::RepeatedPtrField<Resource>& resources)
-{
-  return stream << Resources(resources);
-}
+    const google::protobuf::RepeatedPtrField<Resource>& resources);
 
 
 inline Resources operator+(

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/v1/values.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/v1/values.hpp b/include/mesos/v1/values.hpp
index a160bd4..03a19ee 100644
--- a/include/mesos/v1/values.hpp
+++ b/include/mesos/v1/values.hpp
@@ -17,6 +17,8 @@
 #ifndef __MESOS_V1_VALUES_HPP__
 #define __MESOS_V1_VALUES_HPP__
 
+#include <iosfwd>
+
 #include <mesos/v1/mesos.hpp>
 
 #include <stout/try.hpp>

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/include/mesos/values.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/values.hpp b/include/mesos/values.hpp
index 58af972..0d09729 100644
--- a/include/mesos/values.hpp
+++ b/include/mesos/values.hpp
@@ -17,6 +17,8 @@
 #ifndef __VALUES_HPP__
 #define __VALUES_HPP__
 
+#include <iosfwd>
+
 #include <mesos/mesos.hpp>
 
 #include <stout/try.hpp>

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/src/common/resources.cpp
----------------------------------------------------------------------
diff --git a/src/common/resources.cpp b/src/common/resources.cpp
index b9d31ae..6afd2df 100644
--- a/src/common/resources.cpp
+++ b/src/common/resources.cpp
@@ -16,12 +16,15 @@
 
 #include <stdint.h>
 
+#include <ostream>
 #include <set>
 #include <string>
 #include <vector>
 
 #include <glog/logging.h>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/resources.hpp>
 #include <mesos/values.hpp>
 #include <mesos/type_utils.hpp>
@@ -1392,4 +1395,12 @@ ostream& operator<<(ostream& stream, const Resources& resources)
   return stream;
 }
 
+
+ostream& operator<<(
+    ostream& stream,
+    const google::protobuf::RepeatedPtrField<Resource>& resources)
+{
+  return stream << Resources(resources);
+}
+
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/src/common/type_utils.cpp
----------------------------------------------------------------------
diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp
index c6c9ba7..76f48f6 100644
--- a/src/common/type_utils.cpp
+++ b/src/common/type_utils.cpp
@@ -14,6 +14,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <ostream>
+
 #include <mesos/attributes.hpp>
 #include <mesos/mesos.hpp>
 #include <mesos/resources.hpp>
@@ -21,6 +23,10 @@
 
 #include "messages/messages.hpp"
 
+using std::ostream;
+using std::string;
+using std::vector;
+
 namespace mesos {
 
 // TODO(vinod): Ensure that these operators do not go out of sync
@@ -360,4 +366,131 @@ bool operator!=(const TaskStatus& left, const TaskStatus& right)
   return !(left == right);
 }
 
+
+ostream& operator<<(ostream& stream, const ContainerID& containerId)
+{
+  return stream << containerId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const ContainerInfo& containerInfo)
+{
+  return stream << containerInfo.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const ExecutorID& executorId)
+{
+  return stream << executorId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const ExecutorInfo& executor)
+{
+  return stream << executor.DebugString();
+}
+
+
+ostream& operator<<(std::ostream& stream, const FrameworkID& frameworkId)
+{
+  return stream << frameworkId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const MasterInfo& master)
+{
+  return stream << master.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const OfferID& offerId)
+{
+  return stream << offerId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const RateLimits& limits)
+{
+  return stream << limits.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const SlaveID& slaveId)
+{
+  return stream << slaveId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const SlaveInfo& slave)
+{
+  return stream << slave.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const TaskID& taskId)
+{
+  return stream << taskId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const MachineID& machineId)
+{
+  if (machineId.has_hostname() && machineId.has_ip()) {
+    return stream << machineId.hostname() << " (" << machineId.ip() << ")";
+  }
+
+  // If only a hostname is present.
+  if (machineId.has_hostname()) {
+    return stream << machineId.hostname();
+  } else { // If there is no hostname, then there is an IP.
+    return stream << "(" << machineId.ip() << ")";
+  }
+}
+
+
+ostream& operator<<(ostream& stream, const TaskInfo& task)
+{
+  return stream << task.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const TaskState& state)
+{
+  return stream << TaskState_Name(state);
+}
+
+
+ostream& operator<<(ostream& stream, const vector<TaskID>& taskIds)
+{
+  stream << "[ ";
+  for (auto it = taskIds.begin(); it != taskIds.end(); ++it) {
+    if (it != taskIds.begin()) {
+      stream << ", ";
+    }
+    stream << *it;
+  }
+  stream << " ]";
+  return stream;
+}
+
+
+ostream& operator<<(
+    ostream& stream,
+    const FrameworkInfo::Capability& capability)
+{
+  return stream << FrameworkInfo::Capability::Type_Name(capability.type());
+}
+
+
+ostream& operator<<(ostream& stream, const Image::Type& imageType)
+{
+  return stream << Image::Type_Name(imageType);
+}
+
+
+ostream& operator<<(ostream& stream, const hashmap<string, string>& map)
+{
+  return stream << stringify(map);
+}
+
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/src/v1/mesos.cpp
----------------------------------------------------------------------
diff --git a/src/v1/mesos.cpp b/src/v1/mesos.cpp
index 13a58ba..9264752 100644
--- a/src/v1/mesos.cpp
+++ b/src/v1/mesos.cpp
@@ -14,10 +14,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <ostream>
+
 #include <mesos/v1/attributes.hpp>
 #include <mesos/v1/mesos.hpp>
 #include <mesos/v1/resources.hpp>
 
+using std::ostream;
+using std::string;
+using std::vector;
+
 namespace mesos {
 namespace v1 {
 
@@ -356,6 +362,131 @@ bool operator!=(const TaskStatus& left, const TaskStatus& right)
   return !(left == right);
 }
 
+ostream& operator<<(ostream& stream, const ContainerID& containerId)
+{
+  return stream << containerId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const ContainerInfo& containerInfo)
+{
+  return stream << containerInfo.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const ExecutorID& executorId)
+{
+  return stream << executorId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const ExecutorInfo& executor)
+{
+  return stream << executor.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const FrameworkID& frameworkId)
+{
+  return stream << frameworkId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const MasterInfo& master)
+{
+  return stream << master.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const OfferID& offerId)
+{
+  return stream << offerId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const RateLimits& limits)
+{
+  return stream << limits.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const AgentID& agentId)
+{
+  return stream << agentId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const AgentInfo& agent)
+{
+  return stream << agent.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const TaskID& taskId)
+{
+  return stream << taskId.value();
+}
+
+
+ostream& operator<<(ostream& stream, const MachineID& machineId)
+{
+  if (machineId.has_hostname() && machineId.has_ip()) {
+    return stream << machineId.hostname() << " (" << machineId.ip() << ")";
+  }
+
+  // If only a hostname is present.
+  if (machineId.has_hostname()) {
+    return stream << machineId.hostname();
+  } else { // If there is no hostname, then there is an IP.
+    return stream << "(" << machineId.ip() << ")";
+  }
+}
+
+
+ostream& operator<<(ostream& stream, const TaskInfo& task)
+{
+  return stream << task.DebugString();
+}
+
+
+ostream& operator<<(ostream& stream, const TaskState& state)
+{
+  return stream << TaskState_Name(state);
+}
+
+
+ostream& operator<<(ostream& stream, const vector<TaskID>& taskIds)
+{
+  stream << "[ ";
+  for (auto it = taskIds.begin(); it != taskIds.end(); ++it) {
+    if (it != taskIds.begin()) {
+      stream << ", ";
+    }
+    stream << *it;
+  }
+  stream << " ]";
+  return stream;
+}
+
+
+ostream& operator<<(
+    ostream& stream,
+    const FrameworkInfo::Capability& capability)
+{
+  return stream << FrameworkInfo::Capability::Type_Name(capability.type());
+}
+
+
+ostream& operator<<(ostream& stream, const Image::Type& imageType)
+{
+  return stream << Image::Type_Name(imageType);
+}
+
+
+ostream& operator<<(ostream& stream, const hashmap<string, string>& map)
+{
+  return stream << stringify(map);
+}
 
 } // namespace v1 {
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/820640de/src/v1/resources.cpp
----------------------------------------------------------------------
diff --git a/src/v1/resources.cpp b/src/v1/resources.cpp
index 0c0eee6..8de6672 100644
--- a/src/v1/resources.cpp
+++ b/src/v1/resources.cpp
@@ -16,12 +16,15 @@
 
 #include <stdint.h>
 
+#include <ostream>
 #include <set>
 #include <string>
 #include <vector>
 
 #include <glog/logging.h>
 
+#include <google/protobuf/repeated_field.h>
+
 #include <mesos/v1/mesos.hpp>
 #include <mesos/v1/resources.hpp>
 #include <mesos/v1/values.hpp>
@@ -1394,5 +1397,13 @@ ostream& operator<<(ostream& stream, const Resources& resources)
   return stream;
 }
 
+
+ostream& operator<<(
+    ostream& stream,
+    const google::protobuf::RepeatedPtrField<Resource>& resources)
+{
+  return stream << Resources(resources);
+}
+
 } // namespace v1 {
 } // namespace mesos {