Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fix compile error in java modular
  • Loading branch information
Soeren Sonnenburg committed Jun 8, 2012
1 parent 25d7549 commit c29a9b2
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 24 deletions.
6 changes: 0 additions & 6 deletions src/interfaces/modular/SGBase.i
Expand Up @@ -268,12 +268,6 @@ public void readExternal(java.io.ObjectInput in) throws java.io.IOException, jav

%include "swig_typemaps.i"

%include "std_vector.i"
namespace std {
%template(IntStdVector) vector<int32_t>;
%template(DoubleStdVector) vector<float64_t>;
}

#ifndef SWIGR
%include <shogun/base/init.h>
#endif
Expand Down
134 changes: 119 additions & 15 deletions src/shogun/lib/SGVector.cpp
Expand Up @@ -319,18 +319,6 @@ float32_t SGVector<T>::dot(const float32_t* v1, const float32_t* v2, int32_t n)
return r;
}

template <class T>
float64_t SGVector<T>::twonorm(const float64_t* v, int32_t n)
{
float64_t norm = 0.0;
#ifdef HAVE_LAPACK
norm = cblas_dnrm2(n, v, 1);
#else
norm = CMath::sqrt(SGVector::dot(v, v, n));
#endif
return norm;
}

/** random vector */
template <class T>
void SGVector<T>::random_vector(T* vec, int32_t len, T min_value, T max_value)
Expand Down Expand Up @@ -366,9 +354,102 @@ void SGVector<T>::permute_vector(SGVector<T> vec)
}
}

/// || x ||_2
template <class T>
T SGVector<T>::twonorm(T* x, int32_t len)
template <>
bool SGVector<bool>::twonorm(const bool* x, int32_t len)
{
SG_SNOTIMPLEMENTED;
return false;
}

template <>
char SGVector<char>::twonorm(const char* x, int32_t len)
{
SG_SNOTIMPLEMENTED;
return '\0';
}

template <>
int8_t SGVector<int8_t>::twonorm(const int8_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
uint8_t SGVector<uint8_t>::twonorm(const uint8_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
int16_t SGVector<int16_t>::twonorm(const int16_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
uint16_t SGVector<uint16_t>::twonorm(const uint16_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
int32_t SGVector<int32_t>::twonorm(const int32_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
uint32_t SGVector<uint32_t>::twonorm(const uint32_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
int64_t SGVector<int64_t>::twonorm(const int64_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
uint64_t SGVector<uint64_t>::twonorm(const uint64_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}

template <>
float32_t SGVector<float32_t>::twonorm(const float32_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
Expand All @@ -377,6 +458,29 @@ T SGVector<T>::twonorm(T* x, int32_t len)
return CMath::sqrt(result);
}

template <>
float64_t SGVector<float64_t>::twonorm(const float64_t* v, int32_t n)
{
float64_t norm = 0.0;
#ifdef HAVE_LAPACK
norm = cblas_dnrm2(n, v, 1);
#else
norm = CMath::sqrt(SGVector::dot(v, v, n));
#endif
return norm;
}

template <>
floatmax_t SGVector<floatmax_t>::twonorm(const floatmax_t* x, int32_t len)
{
float64_t result=0;
for (int32_t i=0; i<len; i++)
result+=x[i]*x[i];

return CMath::sqrt(result);
}


template <class T>
float64_t SGVector<T>::onenorm(T* x, int32_t len)
{
Expand Down
4 changes: 1 addition & 3 deletions src/shogun/lib/SGVector.h
Expand Up @@ -175,13 +175,11 @@ template<class T> class SGVector : public SGReferencedData
}

/// || x ||_2
static T twonorm(T* x, int32_t len);
static T twonorm(const T* x, int32_t len);

/// || x ||_1
static float64_t onenorm(T* x, int32_t len);

static float64_t twonorm(const float64_t* v, int32_t n);

/// || x ||_q^q
static T qsq(T* x, int32_t len, float64_t q);

Expand Down

0 comments on commit c29a9b2

Please sign in to comment.