From 064cb995f16c0a21114e60fc8cff9af2bda7bece Mon Sep 17 00:00:00 2001 From: Viktor Gal Date: Thu, 22 Feb 2018 15:00:50 +0100 Subject: [PATCH] Fix AnyVisitor to expect const function arguments --- src/shogun/base/SGObject.cpp | 48 ++++++++++++++++++++++-------------- src/shogun/lib/any.h | 24 +++++++++--------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/shogun/base/SGObject.cpp b/src/shogun/base/SGObject.cpp index 3e1eda7473d..e7095840ec3 100644 --- a/src/shogun/base/SGObject.cpp +++ b/src/shogun/base/SGObject.cpp @@ -852,27 +852,27 @@ class ToStringVisitor : public AnyVisitor { } - virtual void on(bool* v) + virtual void on(const bool* v) { stream() << (*v ? "true" : "false"); } - virtual void on(int32_t* v) + virtual void on(const int32_t* v) { stream() << *v; } - virtual void on(int64_t* v) + virtual void on(const int64_t* v) { stream() << *v; } - virtual void on(float* v) + virtual void on(const float* v) { stream() << *v; } - virtual void on(double* v) + virtual void on(const double* v) { stream() << *v; } - virtual void on(CSGObject** v) + virtual void on(const CSGObject** v) { if (*v) { @@ -883,29 +883,29 @@ class ToStringVisitor : public AnyVisitor stream() << "null"; } } - virtual void on(SGVector*) + virtual void on(const SGVector* v) { - stream() << "[...]"; + to_string(v); } - virtual void on(SGVector*) + virtual void on(const SGVector* v) { - stream() << "[...]"; + to_string(v); } - virtual void on(SGVector*) + virtual void on(const SGVector* v) { - stream() << "[...]"; + to_string(v); } - virtual void on(SGMatrix*) + virtual void on(const SGMatrix* mat) { - stream() << "[...]"; + to_string(mat); } - virtual void on(SGMatrix*) + virtual void on(const SGMatrix* mat) { - stream() << "[...]"; + to_string(mat); } - virtual void on(SGMatrix* mat) + virtual void on(const SGMatrix* mat) { - stream() << "Matrix(" << mat->num_rows << "," << mat->num_cols << ")"; + to_string(mat); } private: @@ -914,6 +914,18 @@ class ToStringVisitor : public AnyVisitor return *m_stream; } + template + void to_string(const SGMatrix* m) + { + stream() << "Matrix<" << demangled_type() << ">(" << m->num_rows << "," << m->num_cols << ")"; + } + + template + void to_string(const SGVector* v) + { + stream() << "Vector<" << demangled_type() << ">(" << v->vlen << ")"; + } + private: std::stringstream* m_stream; }; diff --git a/src/shogun/lib/any.h b/src/shogun/lib/any.h index 76398d74d5e..6dba4bcc04c 100644 --- a/src/shogun/lib/any.h +++ b/src/shogun/lib/any.h @@ -168,18 +168,18 @@ namespace shogun public: virtual ~AnyVisitor() = default; - virtual void on(bool*) = 0; - virtual void on(int32_t*) = 0; - virtual void on(int64_t*) = 0; - virtual void on(float*) = 0; - virtual void on(double*) = 0; - virtual void on(CSGObject**) = 0; - virtual void on(SGVector*) = 0; - virtual void on(SGVector*) = 0; - virtual void on(SGVector*) = 0; - virtual void on(SGMatrix*) = 0; - virtual void on(SGMatrix*) = 0; - virtual void on(SGMatrix*) = 0; + virtual void on(const bool*) = 0; + virtual void on(const int32_t*) = 0; + virtual void on(const int64_t*) = 0; + virtual void on(const float*) = 0; + virtual void on(const double*) = 0; + virtual void on(const CSGObject**) = 0; + virtual void on(const SGVector*) = 0; + virtual void on(const SGVector*) = 0; + virtual void on(const SGVector*) = 0; + virtual void on(const SGMatrix*) = 0; + virtual void on(const SGMatrix*) = 0; + virtual void on(const SGMatrix*) = 0; void on(Empty*) {