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()15 inline constexpr cache_key_t invalidCacheKey() {
16     return 0;
17 }
18 
isValidCacheKey(cache_key_t key)19 inline constexpr bool isValidCacheKey(cache_key_t key) {
20     return key != invalidCacheKey();
21 }
22 
signedCacheKey(cache_key_t cacheKey)23 inline 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