Skip to content

Commit

Permalink
enable visitor arguments to be rw and fix visitor for SGObject
Browse files Browse the repository at this point in the history
  • Loading branch information
vigsterkr committed Apr 17, 2018
1 parent 8da4063 commit 41dabf9
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 28 deletions.
28 changes: 14 additions & 14 deletions src/shogun/base/SGObject.cpp
Expand Up @@ -822,31 +822,31 @@ class ToStringVisitor : public AnyVisitor
{
}

virtual void on(const bool* v)
virtual void on(bool* v)
{
stream() << (*v ? "true" : "false");
}
virtual void on(const int32_t* v)
virtual void on(int32_t* v)
{
stream() << *v;
}
virtual void on(const int64_t* v)
virtual void on(int64_t* v)
{
stream() << *v;
}
virtual void on(const float* v)
virtual void on(float* v)
{
stream() << *v;
}
virtual void on(const double* v)
virtual void on(double* v)
{
stream() << *v;
}
virtual void on(long double* v)
{
stream() << *v;
}
virtual void on(const CSGObject** v)
virtual void on(CSGObject** v)
{
if (*v)
{
Expand All @@ -857,27 +857,27 @@ class ToStringVisitor : public AnyVisitor
stream() << "null";
}
}
virtual void on(const SGVector<int>* v)
virtual void on(SGVector<int>* v)
{
to_string(v);
}
virtual void on(const SGVector<float>* v)
virtual void on(SGVector<float>* v)
{
to_string(v);
}
virtual void on(const SGVector<double>* v)
virtual void on(SGVector<double>* v)
{
to_string(v);
}
virtual void on(const SGMatrix<int>* mat)
virtual void on(SGMatrix<int>* mat)
{
to_string(mat);
}
virtual void on(const SGMatrix<float>* mat)
virtual void on(SGMatrix<float>* mat)
{
to_string(mat);
}
virtual void on(const SGMatrix<double>* mat)
virtual void on(SGMatrix<double>* mat)
{
to_string(mat);
}
Expand All @@ -889,7 +889,7 @@ class ToStringVisitor : public AnyVisitor
}

template <class T>
void to_string(const SGMatrix<T>* m)
void to_string(SGMatrix<T>* m)
{
if (m)
{
Expand All @@ -913,7 +913,7 @@ class ToStringVisitor : public AnyVisitor
}

template <class T>
void to_string(const SGVector<T>* v)
void to_string(SGVector<T>* v)
{
if (v)
{
Expand Down
34 changes: 20 additions & 14 deletions src/shogun/lib/any.h
Expand Up @@ -170,18 +170,24 @@ namespace shogun
public:
virtual ~AnyVisitor() = default;

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<int>*) = 0;
virtual void on(const SGVector<float>*) = 0;
virtual void on(const SGVector<double>*) = 0;
virtual void on(const SGMatrix<int>*) = 0;
virtual void on(const SGMatrix<float>*) = 0;
virtual void on(const SGMatrix<double>*) = 0;
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<int>*) = 0;
virtual void on(SGVector<float>*) = 0;
virtual void on(SGVector<double>*) = 0;
virtual void on(SGMatrix<int>*) = 0;
virtual void on(SGMatrix<float>*) = 0;
virtual void on(SGMatrix<double>*) = 0;

template<class T, std::enable_if_t<std::is_base_of<CSGObject, T>::value, T>* = nullptr>
void on(T** v)
{
on((CSGObject**)v);
}

void on(Empty*)
{
Expand Down Expand Up @@ -590,7 +596,7 @@ namespace shogun
*/
virtual void visit(void* storage, AnyVisitor* visitor) const
{
visitor->on(typed_pointer<T>(storage));
visitor->on(static_cast<T*>(storage));
}
};

Expand Down Expand Up @@ -679,7 +685,7 @@ namespace shogun
*/
virtual void visit(void* storage, AnyVisitor* visitor) const
{
visitor->on(typed_pointer<T>(storage));
visitor->on(static_cast<T*>(storage));
}
};

Expand Down

0 comments on commit 41dabf9

Please sign in to comment.