tasmet/src/tasmet_utils.h
2016-11-11 23:22:44 +01:00

72 lines
1.4 KiB
C++

// utils.h
//
// Author: J.A. de Jong
//
// Description:
// Some generic utils.
//////////////////////////////////////////////////////////////////////
#pragma once
#ifndef UTILS_H
#define UTILS_H
#include <vector>
#include <map>
#include "tracer.h"
#include "vtypes.h"
#include <typeinfo>
#include <exception>
#include <cmath>
// Purge a vector of components
template<typename T>
void purge(std::vector<T>& vec){
TRACE(10,"purge(vector)");
for (T& it: vec){
delete it;
it=nullptr;
}
vec.clear();
}
// Purge a vector of components
template<typename Key,typename T>
void purge(std::map<Key,T>& map){
TRACE(10,"purge(map)");
for (auto& it: map){
delete it.second;
it.second=nullptr;
}
map.clear();
}
template<typename T>
const T& min(const T& x,const T& y) {
return x<=y? x : y;
}
template<typename T>
const T& max(const T& x,const T& y) {
return x<=y? y : x;
}
template<typename SegType,typename Sys>
SegType* copySeg(const SegType& t,const Sys& sys) {
SegType* newt=new SegType(t);
if(!newt){
WARN("Copying " << typeid(t).name() << "failed!");
}
return newt;
} // copySeg
template<typename T>
void makeNormal(T& c) {
for(auto& val: c)
if(!std::isnormal(val))
val=0;
}
} // namespace utils
//////////////////////////////////////////////////////////////////////