1 #pragma once 2 3 #include <QByteArray> 4 #include <QMetaType> 5 #include <type_traits> // static_assert 6 7 namespace mixxx { 8 9 typedef quint64 cache_key_t; 10 11 // A signed integer is needed for storing cache keys as 12 // integer numbers with full precision in the database. 13 typedef qint64 cache_key_signed_t; 14 invalidCacheKey()15inline constexpr cache_key_t invalidCacheKey() { 16 return 0; 17 } 18 isValidCacheKey(cache_key_t key)19inline constexpr bool isValidCacheKey(cache_key_t key) { 20 return key != invalidCacheKey(); 21 } 22 signedCacheKey(cache_key_t cacheKey)23inline constexpr cache_key_t signedCacheKey(cache_key_t cacheKey) { 24 static_assert( 25 sizeof(cache_key_t) == sizeof(cache_key_signed_t), 26 "size mismatch of signed/unsigned cache key types"); 27 return static_cast<cache_key_signed_t>(cacheKey); 28 } 29 30 // Truncate a message digest to obtain a cache key. 31 // 32 // The message digest should either be empty or contain at least as many 33 // bytes as the size (in bytes) of the cache key. 34 cache_key_t cacheKeyFromMessageDigest(const QByteArray& messageDigest); 35 36 } // namespace mixxx 37 38 Q_DECLARE_METATYPE(mixxx::cache_key_t); 39