Source release 19.3.0
This commit is contained in:
112
util/include/wv_class_utils.h
Normal file
112
util/include/wv_class_utils.h
Normal file
@@ -0,0 +1,112 @@
|
||||
// Copyright 2024 Google LLC. All Rights Reserved. This file and proprietary
|
||||
// source code may only be used and distributed under the Widevine License
|
||||
// Agreement.
|
||||
#ifndef WVCDM_UTIL_CLASS_UTILS_HPP_
|
||||
#define WVCDM_UTIL_CLASS_UTILS_HPP_
|
||||
|
||||
// ==== Disallow Operators ====
|
||||
|
||||
#define WVCDM_DISALLOW_COPY(ClassName) \
|
||||
ClassName(const ClassName&) = delete; \
|
||||
ClassName& operator=(const ClassName&) = delete
|
||||
|
||||
#define WVCDM_DISALLOW_MOVE(ClassName) \
|
||||
ClassName(ClassName&&) = delete; \
|
||||
ClassName& operator=(ClassName&&) = delete
|
||||
|
||||
#define WVCDM_DISALLOW_COPY_AND_MOVE(ClassName) \
|
||||
WVCDM_DISALLOW_COPY(ClassName); \
|
||||
WVCDM_DISALLOW_MOVE(ClassName)
|
||||
|
||||
// ==== Default Operators ====
|
||||
|
||||
#define WVCDM_DEFAULT_COPY(ClassName) \
|
||||
ClassName(const ClassName&) = default; \
|
||||
ClassName& operator=(const ClassName&) = default
|
||||
|
||||
#define WVCDM_DEFAULT_MOVE(ClassName) \
|
||||
ClassName(ClassName&&) = default; \
|
||||
ClassName& operator=(ClassName&&) = default
|
||||
|
||||
#define WVCDM_DEFAULT_COPY_AND_MOVE(ClassName) \
|
||||
WVCDM_DEFAULT_COPY(ClassName); \
|
||||
WVCDM_DEFAULT_MOVE(ClassName)
|
||||
|
||||
// ==== Constexpr Default Operators ====
|
||||
|
||||
#define WVCDM_CONSTEXPR_DEFAULT_COPY(ClassName) \
|
||||
constexpr ClassName(const ClassName&) = default; \
|
||||
constexpr ClassName& operator=(const ClassName&) = default
|
||||
|
||||
#define WVCDM_CONSTEXPR_DEFAULT_MOVE(ClassName) \
|
||||
constexpr ClassName(ClassName&&) = default; \
|
||||
constexpr ClassName& operator=(ClassName&&) = default
|
||||
|
||||
#define WVCDM_CONSTEXPR_DEFAULT_COPY_AND_MOVE(ClassName) \
|
||||
WVCDM_CONSTEXPR_DEFAULT_COPY(ClassName); \
|
||||
WVCDM_CONSTEXPR_DEFAULT_MOVE(ClassName)
|
||||
|
||||
// ==== Comparison Operators ====
|
||||
|
||||
// If a class defines the comparison method "bool IsEqualTo() const",
|
||||
// this macro will define the == and != operators for that class.
|
||||
#define WVCDM_DEFINE_EQ_OPERATORS(ClassName) \
|
||||
bool operator==(const ClassName& other) const { return IsEqualTo(other); } \
|
||||
bool operator!=(const ClassName& other) const { return !IsEqualTo(other); }
|
||||
|
||||
// If a class defines the comparison method "int CompareTo() const",
|
||||
// this macro will define the < <= != == >= > operators for that class.
|
||||
#define WVCDM_DEFINE_CMP_OPERATORS(ClassName) \
|
||||
bool operator<(const ClassName& other) const { \
|
||||
return CompareTo(other) < 0; \
|
||||
} \
|
||||
bool operator<=(const ClassName& other) const { \
|
||||
return CompareTo(other) <= 0; \
|
||||
} \
|
||||
bool operator>(const ClassName& other) const { \
|
||||
return CompareTo(other) > 0; \
|
||||
} \
|
||||
bool operator>=(const ClassName& other) const { \
|
||||
return CompareTo(other) >= 0; \
|
||||
}
|
||||
|
||||
// If a class defines the comparison methods "bool IsEqualTo() const"
|
||||
// and "int CompareTo() const", this macro will define the < <= != ==,
|
||||
// >= > operators.
|
||||
#define WVCDM_DEFINE_EQ_AND_CMP_OPERATORS(ClassName) \
|
||||
WVCDM_DEFINE_EQ_OPERATORS(ClassName) \
|
||||
WVCDM_DEFINE_CMP_OPERATORS(ClassName)
|
||||
|
||||
// ==== Constexpr Comparison Operators ====
|
||||
|
||||
// Same as WVCDM_DEFINE_EQ_OPERATORS, but requires class to define
|
||||
// "constexpr bool IsEqualTo() const" method.
|
||||
#define WVCDM_DEFINE_CONSTEXPR_EQ_OPERATORS(ClassName) \
|
||||
constexpr bool operator==(const ClassName& other) const { \
|
||||
return IsEqualTo(other); \
|
||||
} \
|
||||
constexpr bool operator!=(const ClassName& other) const { \
|
||||
return !IsEqualTo(other); \
|
||||
}
|
||||
|
||||
// Same as WVCDM_DEFINE_CMP_OPERATORS, but requires class to define
|
||||
// "constexpr int CompareTo() const" method.
|
||||
#define WVCDM_DEFINE_CONSTEXPR_CMP_OPERATORS(ClassName) \
|
||||
constexpr bool operator<(const ClassName& other) const { \
|
||||
return CompareTo(other) < 0; \
|
||||
} \
|
||||
constexpr bool operator<=(const ClassName& other) const { \
|
||||
return CompareTo(other) <= 0; \
|
||||
} \
|
||||
constexpr bool operator>(const ClassName& other) const { \
|
||||
return CompareTo(other) > 0; \
|
||||
} \
|
||||
constexpr bool operator>=(const ClassName& other) const { \
|
||||
return CompareTo(other) >= 0; \
|
||||
}
|
||||
|
||||
#define WVCDM_DEFINE_CONSTEXPR_EQ_AND_CMP_OPERATORS(ClassName) \
|
||||
WVCDM_DEFINE_CONSTEXPR_EQ_OPERATORS(ClassName) \
|
||||
WVCDM_DEFINE_CONSTEXPR_CMP_OPERATORS(ClassName)
|
||||
|
||||
#endif // WVCDM_UTIL_CLASS_UTILS_HPP_
|
||||
Reference in New Issue
Block a user