diff options
Diffstat (limited to 'media/libcubeb/src/cubeb_utils.h')
-rw-r--r-- | media/libcubeb/src/cubeb_utils.h | 148 |
1 files changed, 10 insertions, 138 deletions
diff --git a/media/libcubeb/src/cubeb_utils.h b/media/libcubeb/src/cubeb_utils.h index df6751155..d8e9928fe 100644 --- a/media/libcubeb/src/cubeb_utils.h +++ b/media/libcubeb/src/cubeb_utils.h @@ -8,16 +8,11 @@ #if !defined(CUBEB_UTILS) #define CUBEB_UTILS -#include "cubeb/cubeb.h" - -#ifdef __cplusplus - #include <stdint.h> #include <string.h> #include <assert.h> -#include <mutex> #include <type_traits> -#if defined(_WIN32) +#if defined(WIN32) #include "cubeb_utils_win.h" #else #include "cubeb_utils_unix.h" @@ -28,7 +23,6 @@ template<typename T> void PodCopy(T * destination, const T * source, size_t count) { static_assert(std::is_trivial<T>::value, "Requires trivial type"); - assert(destination && source); memcpy(destination, source, count * sizeof(T)); } @@ -37,7 +31,6 @@ template<typename T> void PodMove(T * destination, const T * source, size_t count) { static_assert(std::is_trivial<T>::value, "Requires trivial type"); - assert(destination && source); memmove(destination, source, count * sizeof(T)); } @@ -46,67 +39,9 @@ template<typename T> void PodZero(T * destination, size_t count) { static_assert(std::is_trivial<T>::value, "Requires trivial type"); - assert(destination); memset(destination, 0, count * sizeof(T)); } -namespace { -template<typename T, typename Trait> -void Copy(T * destination, const T * source, size_t count, Trait) -{ - for (size_t i = 0; i < count; i++) { - destination[i] = source[i]; - } -} - -template<typename T> -void Copy(T * destination, const T * source, size_t count, std::true_type) -{ - PodCopy(destination, source, count); -} -} - -/** - * This allows copying a number of elements from a `source` pointer to a - * `destination` pointer, using `memcpy` if it is safe to do so, or a loop that - * calls the constructors and destructors otherwise. - */ -template<typename T> -void Copy(T * destination, const T * source, size_t count) -{ - assert(destination && source); - Copy(destination, source, count, typename std::is_trivial<T>::type()); -} - -namespace { -template<typename T, typename Trait> -void ConstructDefault(T * destination, size_t count, Trait) -{ - for (size_t i = 0; i < count; i++) { - destination[i] = T(); - } -} - -template<typename T> -void ConstructDefault(T * destination, - size_t count, std::true_type) -{ - PodZero(destination, count); -} -} - -/** - * This allows zeroing (using memset) or default-constructing a number of - * elements calling the constructors and destructors if necessary. - */ -template<typename T> -void ConstructDefault(T * destination, size_t count) -{ - assert(destination); - ConstructDefault(destination, count, - typename std::is_arithmetic<T>::type()); -} - template<typename T> class auto_array { @@ -128,11 +63,6 @@ public: return data_; } - T * end() const - { - return data_ + length_; - } - const T& at(size_t index) const { assert(index < length_ && "out of range"); @@ -268,76 +198,18 @@ private: size_t length_; }; -struct auto_array_wrapper { - virtual void push(void * elements, size_t length) = 0; - virtual size_t length() = 0; - virtual void push_silence(size_t length) = 0; - virtual bool pop(size_t length) = 0; - virtual void * data() = 0; - virtual void * end() = 0; - virtual void clear() = 0; - virtual bool reserve(size_t capacity) = 0; - virtual void set_length(size_t length) = 0; - virtual ~auto_array_wrapper() {} -}; - -template <typename T> -struct auto_array_wrapper_impl : public auto_array_wrapper { - auto_array_wrapper_impl() {} - - explicit auto_array_wrapper_impl(uint32_t size) - : ar(size) - {} - - void push(void * elements, size_t length) override { - ar.push(static_cast<T *>(elements), length); - } - - size_t length() override { - return ar.length(); - } - - void push_silence(size_t length) override { - ar.push_silence(length); - } - - bool pop(size_t length) override { - return ar.pop(nullptr, length); - } - - void * data() override { - return ar.data(); - } - - void * end() override { - return ar.end(); - } - - void clear() override { - ar.clear(); - } - - bool reserve(size_t capacity) override { - return ar.reserve(capacity); - } - - void set_length(size_t length) override { - ar.set_length(length); +struct auto_lock { + explicit auto_lock(owned_critical_section & lock) + : lock(lock) + { + lock.enter(); } - - ~auto_array_wrapper_impl() { - ar.clear(); + ~auto_lock() + { + lock.leave(); } - private: - auto_array<T> ar; + owned_critical_section & lock; }; -extern "C" { - size_t cubeb_sample_size(cubeb_sample_format format); -} - -using auto_lock = std::lock_guard<owned_critical_section>; -#endif // __cplusplus - #endif /* CUBEB_UTILS */ |