1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
#ifndef _BLASR_UTIL_IMPL_HPP_
#define _BLASR_UTIL_IMPL_HPP_
#include <cstdint>
#include <cstdlib> // abort()
#include <iostream> // std::cout/std::cerr
#include <new> // bad_alloc
template <typename t_file>
void CrucialOpen(std::string& fileName, t_file& file, std::ios_base::openmode mode)
{
if (mode == 0)
file.open(fileName.c_str());
else
file.open(fileName.c_str(), mode);
if (!file.good()) {
std::cout << "Could not open " << fileName << std::endl;
std::exit(EXIT_FAILURE);
}
}
template <typename T_Int>
T_Int CeilOfFraction(T_Int num, T_Int denom)
{
return num / denom + ((num % denom) && 1);
}
template <typename T>
inline T* ProtectedNew(uint64_t size)
{
T* ptr = nullptr;
try {
ptr = new T[size];
} catch (std::bad_alloc& ba) {
std::cout << "ERROR, allocating " << size * sizeof(T) << " bytes." << ba.what()
<< std::endl;
abort();
}
return ptr;
}
template <typename T>
inline T* ProtectedNew(void)
{
T* ptr = nullptr;
try {
ptr = new T;
} catch (std::bad_alloc& ba) {
std::cout << "ERROR, allocating " << sizeof(T) << " bytes." << ba.what() << std::endl;
abort();
}
return ptr;
}
#endif
|