98 lines
2.3 KiB
C++
98 lines
2.3 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Project : SDK Core
|
|
//
|
|
// Category : SDK Core Interfaces
|
|
// Filename : pluginterfaces/base/futils.h
|
|
// Created by : Steinberg, 01/2004
|
|
// Description : Basic utilities
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
// This file is part of a Steinberg SDK. It is subject to the license terms
|
|
// in the LICENSE file found in the top-level directory of this distribution
|
|
// and at www.steinberg.net/sdklicenses.
|
|
// No part of the SDK, including this file, may be copied, modified, propagated,
|
|
// or distributed except according to the terms contained in the LICENSE file.
|
|
//-----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "pluginterfaces/base/ftypes.h"
|
|
|
|
namespace Steinberg {
|
|
//----------------------------------------------------------------------------
|
|
// min/max/etc. template functions
|
|
template <class T>
|
|
inline const T& Min (const T& a, const T& b)
|
|
{
|
|
return b < a ? b : a;
|
|
}
|
|
|
|
template <class T>
|
|
inline const T& Max (const T& a, const T& b)
|
|
{
|
|
return a < b ? b : a;
|
|
}
|
|
|
|
template <class T>
|
|
inline T Abs (const T& value)
|
|
{
|
|
return (value >= (T)0) ? value : -value;
|
|
}
|
|
|
|
template <class T>
|
|
inline T Sign (const T& value)
|
|
{
|
|
return (value == (T)0) ? 0 : ((value >= (T)0) ? 1 : -1);
|
|
}
|
|
|
|
template <class T>
|
|
inline T Bound (T minval, T maxval, T x)
|
|
{
|
|
if (x < minval)
|
|
return minval;
|
|
else if (x > maxval)
|
|
return maxval;
|
|
return x;
|
|
}
|
|
|
|
template <class T>
|
|
void Swap (T& t1, T& t2)
|
|
{
|
|
T tmp = t1;
|
|
t1 = t2;
|
|
t2 = tmp;
|
|
}
|
|
|
|
template <class T>
|
|
bool IsApproximateEqual (T t1, T t2, T epsilon)
|
|
{
|
|
if (t1 == t2)
|
|
return true;
|
|
T diff = t1 - t2;
|
|
if (diff < 0.0)
|
|
diff = -diff;
|
|
if (diff < epsilon)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
template <class T>
|
|
inline T ToNormalized (const T& value, const int32 numSteps)
|
|
{
|
|
return value / T (numSteps);
|
|
}
|
|
|
|
template <class T>
|
|
inline int32 FromNormalized (const T& norm, const int32 numSteps)
|
|
{
|
|
return Min<int32> (numSteps, int32 (norm * (numSteps + 1)));
|
|
}
|
|
|
|
// Four character constant
|
|
#ifndef CCONST
|
|
#define CCONST(a, b, c, d) \
|
|
((((int32) (a)) << 24) | (((int32) (b)) << 16) | (((int32) (c)) << 8) | (((int32) (d)) << 0))
|
|
#endif
|
|
|
|
//------------------------------------------------------------------------
|
|
} // namespace Steinberg
|