You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by we...@apache.org on 2017/07/18 17:51:19 UTC

arrow git commit: ARROW-1235: [C++] Make operator<< for Array/Status and std::ostream inline

Repository: arrow
Updated Branches:
  refs/heads/master 8152433e7 -> a73252d0e


ARROW-1235: [C++] Make operator<< for Array/Status and std::ostream inline

I'm unable to reproduce the linker failure, but I think this will fix it.

Author: Wes McKinney <we...@twosigma.com>
Author: Wes McKinney <we...@gmail.com>

Closes #864 from wesm/xcode-6.4-fixes and squashes the following commits:

43bb0b8c [Wes McKinney] Add tests for operator<< with Status and Array
f7524379 [Wes McKinney] Also make operator<<(std::ostream& for Array inline, add Array::ToString
cf2b4719 [Wes McKinney] Make operator<< for Status inline


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

Branch: refs/heads/master
Commit: a73252d0e1e8e6e4ca9474571de657c38aedf9a3
Parents: 8152433
Author: Wes McKinney <we...@twosigma.com>
Authored: Tue Jul 18 13:51:14 2017 -0400
Committer: Wes McKinney <we...@twosigma.com>
Committed: Tue Jul 18 13:51:14 2017 -0400

----------------------------------------------------------------------
 cpp/src/arrow/array.cc             | 7 ++++---
 cpp/src/arrow/array.h              | 8 +++++++-
 cpp/src/arrow/pretty_print-test.cc | 4 ++++
 cpp/src/arrow/status-test.cc       | 6 ++++++
 cpp/src/arrow/status.cc            | 5 -----
 cpp/src/arrow/status.h             | 5 ++++-
 6 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/array.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/array.cc b/cpp/src/arrow/array.cc
index f20b849..4a405f2 100644
--- a/cpp/src/arrow/array.cc
+++ b/cpp/src/arrow/array.cc
@@ -107,9 +107,10 @@ std::shared_ptr<Array> Array::Slice(int64_t offset) const {
   return Slice(offset, slice_length);
 }
 
-std::ostream& operator<<(std::ostream& os, const Array& x) {
-  DCHECK(PrettyPrint(x, 0, &os).ok());
-  return os;
+std::string Array::ToString() const {
+  std::stringstream ss;
+  DCHECK(PrettyPrint(*this, 0, &ss).ok());
+  return ss.str();
 }
 
 static inline std::shared_ptr<ArrayData> SliceData(

http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/array.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/array.h b/cpp/src/arrow/array.h
index 2da0b54..c32d5e1 100644
--- a/cpp/src/arrow/array.h
+++ b/cpp/src/arrow/array.h
@@ -236,6 +236,9 @@ class ARROW_EXPORT Array {
 
   int num_fields() const { return static_cast<int>(data_->child_data.size()); }
 
+  /// \return PrettyPrint representation of array suitable for debugging
+  std::string ToString() const;
+
  protected:
   Array() {}
 
@@ -256,7 +259,10 @@ class ARROW_EXPORT Array {
   DISALLOW_COPY_AND_ASSIGN(Array);
 };
 
-ARROW_EXPORT std::ostream& operator<<(std::ostream& os, const Array& x);
+static inline std::ostream& operator<<(std::ostream& os, const Array& x) {
+  os << x.ToString();
+  return os;
+}
 
 class ARROW_EXPORT FlatArray : public Array {
  protected:

http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/pretty_print-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/pretty_print-test.cc b/cpp/src/arrow/pretty_print-test.cc
index 72bd0a8..10a91f5 100644
--- a/cpp/src/arrow/pretty_print-test.cc
+++ b/cpp/src/arrow/pretty_print-test.cc
@@ -49,6 +49,10 @@ void CheckArray(const Array& arr, int indent, const char* expected) {
   ASSERT_OK(PrettyPrint(arr, indent, &sink));
   std::string result = sink.str();
   ASSERT_EQ(std::string(expected, strlen(expected)), result);
+
+  std::stringstream ss;
+  ss << arr;
+  ASSERT_EQ(result, ss.str());
 }
 
 template <typename TYPE, typename C_TYPE>

http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/status-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/status-test.cc b/cpp/src/arrow/status-test.cc
index 969ba97..f32eb15 100644
--- a/cpp/src/arrow/status-test.cc
+++ b/cpp/src/arrow/status-test.cc
@@ -15,6 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
+#include <sstream>
+
 #include "gtest/gtest.h"
 
 #include "arrow/status.h"
@@ -33,6 +35,10 @@ TEST(StatusTest, TestCodeAndMessage) {
 TEST(StatusTest, TestToString) {
   Status file_error = Status::IOError("file error");
   ASSERT_EQ("IOError: file error", file_error.ToString());
+
+  std::stringstream ss;
+  ss << file_error;
+  ASSERT_EQ(file_error.ToString(), ss.str());
 }
 
 }  // namespace arrow

http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/status.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/status.cc b/cpp/src/arrow/status.cc
index 77ecb93..9989742 100644
--- a/cpp/src/arrow/status.cc
+++ b/cpp/src/arrow/status.cc
@@ -32,11 +32,6 @@ void Status::CopyFrom(const State* state) {
   }
 }
 
-std::ostream& operator<<(std::ostream& os, const Status& x) {
-  os << x.ToString();
-  return os;
-}
-
 std::string Status::CodeAsString() const {
   if (state_ == NULL) { return "OK"; }
 

http://git-wip-us.apache.org/repos/asf/arrow/blob/a73252d0/cpp/src/arrow/status.h
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/status.h b/cpp/src/arrow/status.h
index 8491ac8..1bea1fc 100644
--- a/cpp/src/arrow/status.h
+++ b/cpp/src/arrow/status.h
@@ -176,7 +176,10 @@ class ARROW_EXPORT Status {
   void CopyFrom(const State* s);
 };
 
-std::ostream& operator<<(std::ostream& os, const Status& x);
+static inline std::ostream& operator<<(std::ostream& os, const Status& x) {
+  os << x.ToString();
+  return os;
+}
 
 inline Status::Status(const Status& s)
     : state_((s.state_ == NULL) ? NULL : new State(*s.state_)) {}