Commit 69308d7f authored by incardon's avatar incardon

Added missing files

parent f6a17078
SUBDIRS = src
bin_PROGRAMS =
\ No newline at end of file
/*
* csv_multiarray_copy.hpp
*
* Created on: Jun 20, 2015
* Author: i-bird
*/
#ifndef CSV_MULTIARRAY_COPY_HPP_
#define CSV_MULTIARRAY_COPY_HPP_
/*! \brief This class is an helper to produce csv headers from multi-array
*
* Usage:
*
* \code{.cpp}
*
* float src[3];
*
* std::stringstream str;
* csv_col_str<float[3]> cp(std::string("test"),str);
*
* std::cout << str.str() << "\n";
*
* \endcode
*
* Will produce ",test[0],test[1],test[2]"
*
*/
template<typename T>
struct csv_col_str
{
inline csv_col_str(std::string prp, std::stringstream & str)
{
str << "," << prp;
}
};
//! Partial specialization for N=1 1D-Array
template<typename T,size_t N1>
struct csv_col_str<T[N1]>
{
inline csv_col_str(std::string prp, std::stringstream & str)
{
for (size_t i = 0 ; i < N1 ; i++)
str << "," << prp << "_" << "[" << i << "]";
}
};
//! Partial specialization for N=2 2D-Array
template<typename T,size_t N1,size_t N2>
struct csv_col_str<T[N1][N2]>
{
inline csv_col_str(std::string prp, std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
str << "," << prp << "_" << "[" << i1 << "]" << "[" << i2 << "]";
}
}
}
};
//! Partial specialization for N=3
template<typename T,size_t N1,size_t N2,size_t N3>
struct csv_col_str<T[N1][N2][N3]>
{
inline csv_col_str(std::string prp, std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
for (size_t i3 = 0 ; i3 < N3 ; i3++)
{
str << "," << prp << "_" << "[" << i1 << "]" << "[" << i2 << "]" << "[" << i3 << "]";
}
}
}
}
};
//! Partial specialization for N=4
template<typename T,size_t N1,size_t N2,size_t N3,size_t N4>
struct csv_col_str<T[N1][N2][N3][N4]>
{
inline csv_col_str(std::string prp, std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
for (size_t i3 = 0 ; i3 < N3 ; i3++)
{
for (size_t i4 = 0 ; i4 < N4 ; i4++)
{
str << "," << prp << "_" << "[" << i1 << "]" << "[" << i2 << "]" << "[" << i3 << "]" << "[" << i4 << "]";
}
}
}
}
}
};
/*! \brief This class is an helper to produce csv data from multi-array
*
* Usage:
*
* \code{.cpp}
*
* float src[3] = {1.0,2.0,3.0};
*
* std::stringstream str;
* csv_value_str<float[3]> cp(src,str);
*
* std::cout << str.str() << "\n";
*
* \endcode
*
* Will produce ",1.0,2.0,3.0"
*
*/
template<typename T>
struct csv_value_str
{
inline csv_value_str(T & v, std::stringstream & str)
{
str << "," << v;
}
};
//! Partial specialization for N=1 1D-Array
template<typename T,size_t N1>
struct csv_value_str<T[N1]>
{
inline csv_value_str(const T v[N1], std::stringstream & str)
{
for (size_t i = 0 ; i < N1 ; i++)
str << "," << v[i];
}
};
//! Partial specialization for N=2 2D-Array
template<typename T,size_t N1,size_t N2>
struct csv_value_str<T[N1][N2]>
{
inline csv_value_str(const T v[N1][N2], std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
str << "," << v[i1][i2];
}
}
}
};
//! Partial specialization for N=3
template<typename T,size_t N1,size_t N2,size_t N3>
struct csv_value_str<T[N1][N2][N3]>
{
inline csv_value_str(const T v[N1][N2][N3], std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
for (size_t i3 = 0 ; i3 < N3 ; i3++)
{
str << "," << v[i1][i2][i3];
}
}
}
}
};
//! Partial specialization for N=4
template<typename T,size_t N1,size_t N2,size_t N3,size_t N4>
struct csv_value_str<T[N1][N2][N3][N4]>
{
inline csv_value_str(const T v[N1][N2][N3][N4], std::stringstream & str)
{
for (size_t i1 = 0 ; i1 < N1 ; i1++)
{
for (size_t i2 = 0 ; i2 < N2 ; i2++)
{
for (size_t i3 = 0 ; i3 < N3 ; i3++)
{
for (size_t i4 = 0 ; i4 < N4 ; i4++)
{
str << "," << v[i1][i2][i3][i4];
}
}
}
}
}
};
#endif /* CSV_MULTIARRAY_COPY_HPP_ */
/*
* util.hpp
*
* Created on: May 7, 2015
* Author: Pietro Incardona
*/
#ifndef UTIL_HPP_
#define UTIL_HPP_
#include <boost/iostreams/device/mapped_file.hpp>
/*! \brief Compare two files, return true if they match
*
* \param file1 path1
* \param file2 path2
*
* \return true if they match
*
*/
bool compare(std::string file1, std::string file2)
{
boost::iostreams::mapped_file_source f1(file1);
boost::iostreams::mapped_file_source f2(file2);
if( f1.size() == f2.size() && std::equal(f1.data(), f1.data() + f1.size(), f2.data()) )
return true;
else
return false;
}
struct RGB
{
float R;
float G;
float B;
std::string toString()
{
return std::to_string(R) + " " + std::to_string(G) + " " + std::to_string(B);
}
};
/*! \brief Return the color sampled from one group
*
* groups:
*
* 0: Red
* 1: Green
* 2: Blue
* 3: Yellow
* 4: Cyan
* 5: Magenta
* 6: Orange
* 7: Chartreuse-Green
* 8: Spring Green
* 9: Azure
* 10: Violet
* 11: Rose
*
* \param group
*
*/
struct RGB getColor(int group, std::uniform_real_distribution<float> & d, std::default_random_engine & g)
{
struct RGB col;
if (group == 0)
{
float s = d(g);
col.R = s/2 + 0.5;
col.G = 0.0;
col.B = 0.0;
}
else if (group == 1)
{
float s = d(g);
col.R = 0.0;
col.G = s/2 + 0.5;
col.B = 0.0;
}
else if (group == 2)
{
float s = d(g);
col.R = 0.0;
col.G = 0.0;
col.B = s;
}
else if (group == 3)
{
float s = d(g);
col.R = s/2 + 0.5;
col.G = s/2 + 0.5;
col.B = 0.0;
}
else if (group == 4)
{
float s = d(g);
col.R = s/2 + 0.5;
col.G = 0.0;
col.B = s/2 + 0.5;
}
else if (group == 5)
{
float s = d(g);
col.R = 0.0;
col.G = s/2 + 0.5;
col.B = s/2 + 0.5;
}
else if (group == 6)
{
float s = d(g);
col.R = s/2 + 0.5;
col.G = s/4 + 0.5;
col.B = 0.0;
}
else if (group == 7)
{
float s = d(g);
col.R = s/4 + 0.5;
col.G = s/2 + 0.5;
col.B = 0.0;
}
else if (group == 8)
{
float s = d(g);
col.R = 0.0;
col.G = s/2 + 0.5;
col.B = s/4 + 0.5;
}
else if (group == 9)
{
float s = d(g);
col.R = 0.0;
col.G = s/4 + 0.5;
col.B = s/2 + 0.5;
}
else if (group == 10)
{
float s = d(g);
col.R = s/4 + 0.5;
col.G = 0.0;
col.B = s/2 + 0.5;
}
else if (group == 11)
{
float s = d(g);
col.R = s/2 + 0.5;
col.G = 0.0;
col.B = s/4 + 0.5;
}
return col;
}
/*! \brief Check if one string end with a particular string
*
* \param fullString string to check
* \param ending ending string to check
*
*/
bool hasEnding (std::string const &fullString, std::string const &ending)
{
if (fullString.length() >= ending.length())
{return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));}
else
{return false;}
}
#endif /* UTIL_HPP_ */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment