|
- //-----------------------------------------------------------------------------
- // 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
|