FAST  3.2.0
Framework for Heterogeneous Medical Image Computing and Visualization
Utility.hpp
Go to the documentation of this file.
1 #pragma once
4 #include <algorithm>
5 #include <functional>
6 #include <cctype>
7 #include <locale>
8 
9 // This file contains a set of utility functions
10 
11 // Undefine windows crap
12 #undef min
13 #undef max
14 
15 namespace fast {
16 
17 FAST_EXPORT double log2(double n);
18 FAST_EXPORT double round(double n);
19 FAST_EXPORT double round(double n, int decimals);
20 
27 template <class T>
28 T square(T x) {
29  return x*x;
30 }
31 
32 template <typename ...Args>
33 std::string format(std::string format, Args && ... args) {
34  auto size = std::snprintf(nullptr, 0, format.c_str(), std::forward<Args>(args)...);
35  std::string output(size + 1, '\0');
36  std::sprintf(&output[0], format.c_str(), std::forward<Args>(args)...);
37  return output;
38 }
39 
40 template<class T>
41 T min(T a, T b) {
42  return a < b ? a : b;
43 }
44 
45 template<class T>
46 T max(T a, T b) {
47  return a > b ? a : b;
48 }
49 
50 template<class T>
51 T sign(T value) {
52  if(value > 0) {
53  return 1;
54  } else if (value < 0) {
55  return -1;
56  } else {
57  return 0;
58  }
59 }
60 
61 FAST_EXPORT unsigned int getPowerOfTwoSize(unsigned int size);
62 FAST_EXPORT void* allocateDataArray(unsigned int voxels, DataType type, unsigned int nrOfComponents);
63 template <class T>
64 float getSumFromOpenCLImageResult(void* voidData, unsigned int size, unsigned int nrOfComponents) {
65  T* data = (T*)voidData;
66  float sum = 0.0f;
67  for(unsigned int i = 0; i < size*nrOfComponents; i += nrOfComponents) {
68  sum += data[i];
69  }
70  return sum;
71 }
72 
73 FAST_EXPORT void getMaxAndMinFromOpenCLImage(OpenCLDevice::pointer device, cl::Image2D image, DataType type, float* min, float* max);
74 FAST_EXPORT void getMaxAndMinFromOpenCLImage(OpenCLDevice::pointer device, cl::Image3D image, DataType type, float* min, float* max);
75 FAST_EXPORT void getMaxAndMinFromOpenCLBuffer(OpenCLDevice::pointer device, cl::Buffer buffer, unsigned int size, DataType type, float* min, float* max);
76 FAST_EXPORT void getIntensitySumFromOpenCLImage(OpenCLDevice::pointer device, cl::Image2D image, DataType type, float* sum);
77 
78 template <class T>
79 void getMaxAndMinFromData(void* voidData, unsigned int nrOfElements, float* min, float* max) {
80  T* data = (T*)voidData;
81 
84  for(unsigned int i = 0; i < nrOfElements; i++) {
85  if((float)data[i] < *min) {
86  *min = (float)data[i];
87  }
88  if((float)data[i] > *max) {
89  *max = (float)data[i];
90  }
91  }
92 }
93 
94 template <class T>
95 float getSumFromData(void* voidData, unsigned int nrOfElements) {
96  T* data = (T*)voidData;
97 
98  float sum = 0.0f;
99  for(unsigned int i = 0; i < nrOfElements; i++) {
100  sum += (float)data[i];
101  }
102  return sum;
103 }
104 
105 FAST_EXPORT cl::size_t<3> createRegion(unsigned int x, unsigned int y, unsigned int z);
106 FAST_EXPORT cl::size_t<3> createRegion(Vector3ui size);
107 FAST_EXPORT cl::size_t<3> createOrigoRegion();
108 
109 FAST_EXPORT std::string getCLErrorString(cl_int err);
110 
117 FAST_EXPORT std::vector<std::string> split(const std::string input, const std::string& delimiter = " ", float removeEmpty = true);
118 
119 // trim from start (in place)
120 static inline void ltrim(std::string &s) {
121  s.erase(s.begin(), std::find_if(s.begin(), s.end(),
122  [](unsigned char c) {return !std::isspace(c); }));
123 }
124 
125 // trim from end (in place)
126 static inline void rtrim(std::string &s) {
127  s.erase(std::find_if(s.rbegin(), s.rend(),
128  [](unsigned char c) {return !std::isspace(c); }).base(), s.end());
129 }
130 
131 // trim from both ends (in place)
132 static inline void trim(std::string &s) {
133  ltrim(s);
134  rtrim(s);
135 }
136 
137 /*
138  * Replace all occurences of from to to in str
139  */
140 FAST_EXPORT std::string replace(std::string str, std::string find, std::string replacement);
141 
142 template <class T>
143 static inline void hash_combine(std::size_t& seed, const T& v)
144 {
145  std::hash<T> hasher;
146  seed ^= hasher(v) + 0x9e3779b9 + (seed<<6) + (seed>>2);
147 }
148 
149 FAST_EXPORT Matrix4f loadPerspectiveMatrix(float fovy, float aspect, float zNear, float zFar);
150 
151 FAST_EXPORT Matrix4f loadOrthographicMatrix(float left, float right, float bottom, float top, float zNear, float zFar);
152 
157 FAST_EXPORT void createDirectory(std::string path);
158 
163 FAST_EXPORT void createDirectories(std::string path);
164 
170 FAST_EXPORT bool fileExists(std::string filename);
171 
179 FAST_EXPORT std::vector<std::string> getDirectoryList(std::string path, bool getFiles = true, bool getDirectories = false);
180 
188 FAST_EXPORT std::string getDirName(std::string path);
189 
195 FAST_EXPORT std::string currentDateTime(std::string format = "%Y-%m-%d-%H%M%S");
196 
202 FAST_EXPORT std::string join(std::string path);
203 
209 FAST_EXPORT std::string getModifiedDate(std::string filename);
210 
219 template<typename ...T>
220 std::string join(const std::string& path1, T... args) {
221  return path1 + "/" + join(args...);
222 }
223 
229 FAST_EXPORT bool isFile(const std::string& path);
230 
236 FAST_EXPORT bool isDir(const std::string& path);
237 
245 template <class T>
246 std::unique_ptr<T> make_uninitialized_unique(std::size_t size) {
247  return std::unique_ptr<T>(new typename std::remove_extent<T>::type[size]);
248 }
249 
255 FAST_EXPORT void extractZipFile(std::string zipFilepath, std::string destination);
256 
257 FAST_EXPORT std::string stringToLower(std::string);
258 FAST_EXPORT std::string stringToUpper(std::string);
259 
260 } // end namespace fast
261 
fast::loadPerspectiveMatrix
FAST_EXPORT Matrix4f loadPerspectiveMatrix(float fovy, float aspect, float zNear, float zFar)
fast::ExecutionDevice::pointer
std::shared_ptr< ExecutionDevice > pointer
Definition: ExecutionDevice.hpp:11
fast::log2
FAST_EXPORT double log2(double n)
fast::getMaxAndMinFromOpenCLImage
FAST_EXPORT void getMaxAndMinFromOpenCLImage(OpenCLDevice::pointer device, cl::Image2D image, DataType type, float *min, float *max)
fast::getPowerOfTwoSize
FAST_EXPORT unsigned int getPowerOfTwoSize(unsigned int size)
fast::DataType
DataType
Definition: DataTypes.hpp:38
fast
Definition: AffineTransformation.hpp:7
fast::getSumFromData
float getSumFromData(void *voidData, unsigned int nrOfElements)
Definition: Utility.hpp:95
fast::isFile
FAST_EXPORT bool isFile(const std::string &path)
fast::getDirName
FAST_EXPORT std::string getDirName(std::string path)
fast::join
FAST_EXPORT std::string join(std::string path)
fast::loadOrthographicMatrix
FAST_EXPORT Matrix4f loadOrthographicMatrix(float left, float right, float bottom, float top, float zNear, float zFar)
fast::createDirectory
FAST_EXPORT void createDirectory(std::string path)
fast::createOrigoRegion
FAST_EXPORT cl::size_t< 3 > createOrigoRegion()
fast::stringToLower
FAST_EXPORT std::string stringToLower(std::string)
ExecutionDevice.hpp
fast::createRegion
FAST_EXPORT cl::size_t< 3 > createRegion(unsigned int x, unsigned int y, unsigned int z)
fast::getModifiedDate
FAST_EXPORT std::string getModifiedDate(std::string filename)
fast::getDirectoryList
FAST_EXPORT std::vector< std::string > getDirectoryList(std::string path, bool getFiles=true, bool getDirectories=false)
fast::fileExists
FAST_EXPORT bool fileExists(std::string filename)
fast::stringToUpper
FAST_EXPORT std::string stringToUpper(std::string)
fast::split
FAST_EXPORT std::vector< std::string > split(const std::string input, const std::string &delimiter=" ", float removeEmpty=true)
fast::format
std::string format(std::string format, Args &&... args)
Definition: Utility.hpp:33
fast::createDirectories
FAST_EXPORT void createDirectories(std::string path)
fast::max
T max(T a, T b)
Definition: Utility.hpp:46
fast::square
T square(T x)
Definition: Utility.hpp:28
fast::isDir
FAST_EXPORT bool isDir(const std::string &path)
fast::getSumFromOpenCLImageResult
float getSumFromOpenCLImageResult(void *voidData, unsigned int size, unsigned int nrOfComponents)
Definition: Utility.hpp:64
fast::round
FAST_EXPORT double round(double n)
fast::currentDateTime
FAST_EXPORT std::string currentDateTime(std::string format="%Y-%m-%d-%H%M%S")
fast::min
T min(T a, T b)
Definition: Utility.hpp:41
DataTypes.hpp
fast::getMaxAndMinFromOpenCLBuffer
FAST_EXPORT void getMaxAndMinFromOpenCLBuffer(OpenCLDevice::pointer device, cl::Buffer buffer, unsigned int size, DataType type, float *min, float *max)
fast::sign
T sign(T value)
Definition: Utility.hpp:51
fast::getIntensitySumFromOpenCLImage
FAST_EXPORT void getIntensitySumFromOpenCLImage(OpenCLDevice::pointer device, cl::Image2D image, DataType type, float *sum)
fast::getMaxAndMinFromData
void getMaxAndMinFromData(void *voidData, unsigned int nrOfElements, float *min, float *max)
Definition: Utility.hpp:79
fast::replace
FAST_EXPORT std::string replace(std::string str, std::string find, std::string replacement)
fast::getCLErrorString
FAST_EXPORT std::string getCLErrorString(cl_int err)
fast::make_uninitialized_unique
std::unique_ptr< T > make_uninitialized_unique(std::size_t size)
Definition: Utility.hpp:246
fast::allocateDataArray
FAST_EXPORT void * allocateDataArray(unsigned int voxels, DataType type, unsigned int nrOfComponents)
fast::extractZipFile
FAST_EXPORT void extractZipFile(std::string zipFilepath, std::string destination)
fast::Vector3ui
Eigen::Matrix< uint, 3, 1 > Vector3ui
Definition: DataTypes.hpp:35