aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcm/PcmUtils.hxx
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-12-02 09:09:19 +0100
committerMax Kellermann <max@duempel.org>2013-12-02 11:21:32 +0100
commit3a0f3eaa50c748e2a8e42f15beb4bf447fa1a87c (patch)
tree983d9a7a91a83ef81b0d67c9b98148524def796f /src/pcm/PcmUtils.hxx
parent80eb8d9e26007fb961d2bb7a41e5e3e5bf9360f1 (diff)
downloadmpd-3a0f3eaa50c748e2a8e42f15beb4bf447fa1a87c.tar.gz
mpd-3a0f3eaa50c748e2a8e42f15beb4bf447fa1a87c.tar.xz
mpd-3a0f3eaa50c748e2a8e42f15beb4bf447fa1a87c.zip
pcm/PcmUtils: use the SampleTraits library
Diffstat (limited to 'src/pcm/PcmUtils.hxx')
-rw-r--r--src/pcm/PcmUtils.hxx15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/pcm/PcmUtils.hxx b/src/pcm/PcmUtils.hxx
index 108ba85ae..06b3acb4d 100644
--- a/src/pcm/PcmUtils.hxx
+++ b/src/pcm/PcmUtils.hxx
@@ -26,6 +26,9 @@
#include <stdint.h>
+enum class SampleFormat : uint8_t;
+template<SampleFormat F> struct SampleTraits;
+
/**
* Add a byte count to the specified pointer. This is a utility
* function to convert a source pointer and a byte count to an "end"
@@ -42,13 +45,15 @@ pcm_end_pointer(const T *p, size_t size)
* Check if the value is within the range of the provided bit size,
* and caps it if necessary.
*/
-template<typename T, typename U, unsigned bits>
+template<SampleFormat F, class Traits=SampleTraits<F>>
gcc_const
-static inline T
-PcmClamp(U x)
+static inline typename Traits::value_type
+PcmClamp(typename Traits::long_type x)
{
- constexpr U MIN_VALUE = -(U(1) << (bits - 1));
- constexpr U MAX_VALUE = (U(1) << (bits - 1)) - 1;
+ typedef typename Traits::value_type T;
+ typedef typename Traits::long_type U;
+ constexpr U MIN_VALUE = -(U(1) << (Traits::BITS - 1));
+ constexpr U MAX_VALUE = (U(1) << (Traits::BITS - 1)) - 1;
typedef std::numeric_limits<T> limits;
static_assert(MIN_VALUE >= limits::min(), "out of range");