diff --git a/src/util/util.hpp b/src/util/util.hpp new file mode 100644 index 0000000000000000000000000000000000000000..f46137ba30972114e1b29f91c73c534f4fd78085 --- /dev/null +++ b/src/util/util.hpp @@ -0,0 +1,179 @@ +/* + * util.hpp + * + * Created on: May 7, 2015 + * Author: Pietro Incardona + */ + +#include "config.h" + +#include "util/SimpleRNG.hpp" + +#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 + * + */ +static inline 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; +} + +//! RGB color struct +struct RGB +{ + //! Red + float R; + + //! Green + float G; + + //! Blue + float B; + + //! Return the color as string + 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 + * + */ + +static inline struct RGB getColor(int group, SimpleRNG & d) +{ + struct RGB col; + + float s = (float)d.GetUniform(); + + group = group % 12; + +#ifdef ON_IO_UNIT_TESTS + s = 0.5; +#endif + + if (group == 0) + { + col.R = s/2 + 0.5; + col.G = 0.0; + col.B = 0.0; + } + else if (group == 1) + { + col.R = 0.0; + col.G = s/2 + 0.5; + col.B = 0.0; + } + else if (group == 2) + { + col.R = 0.0; + col.G = 0.0; + col.B = s; + } + else if (group == 3) + { + col.R = s/2 + 0.5; + col.G = s/2 + 0.5; + col.B = 0.0; + } + else if (group == 4) + { + col.R = s/2 + 0.5; + col.G = 0.0; + col.B = s/2 + 0.5; + } + else if (group == 5) + { + col.R = 0.0; + col.G = s/2 + 0.5; + col.B = s/2 + 0.5; + } + else if (group == 6) + { + col.R = s/2 + 0.5; + col.G = s/4 + 0.5; + col.B = 0.0; + } + else if (group == 7) + { + col.R = s/4 + 0.5; + col.G = s/2 + 0.5; + col.B = 0.0; + } + else if (group == 8) + { + col.R = 0.0; + col.G = s/2 + 0.5; + col.B = s/4 + 0.5; + } + else if (group == 9) + { + col.R = 0.0; + col.G = s/4 + 0.5; + col.B = s/2 + 0.5; + } + else if (group == 10) + { + col.R = s/4 + 0.5; + col.G = 0.0; + col.B = s/2 + 0.5; + } + else + { + 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 + * + */ +static inline 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_ */