Files
winamp/Src/external_dependencies/openmpt-trunk/include/ancient/src/common/OverflowCheck.hpp
2024-09-24 14:54:57 +02:00

33 lines
502 B
C++
Vendored

/* Copyright (C) Teemu Suutari */
#ifndef OVERFLOW_CHECK_HPP
#define OVERFLOW_CHECK_HPP
#include "Buffer.hpp"
namespace ancient::internal
{
class OverflowCheck
{
public:
template<typename T,typename U>
static T sum(T a,U b)
{
// TODO: Add type traits to handle signed integers
T ret=a+b;
if (ret<a) throw Buffer::OutOfBoundsError();
return ret;
}
template<typename T,typename U,typename ...Args>
static T sum(T a,U b,Args... args)
{
return sum(sum(a,b),args...);
}
};
}
#endif